JavaRush /Java блогу /Random-KY /Бир өлчөмдүү жана эки өлчөмдүү массивдерди камтыган масел...
Анзор Кармов
Деңгээл
Санкт-Петербург

Бир өлчөмдүү жана эки өлчөмдүү массивдерди камтыган маселелерди чечүү

Группада жарыяланган
Бул макалада массивдерди камтыган көйгөйлөр каралат (жана көбүрөөк деңгээлде көз карандысыз талдоо каралган). Биз төмөнкү багыттар боюнча квалификациябызды жогорулатабыз:
  1. Бир өлчөмдүү массивдер

    1. Көйгөйлөр "Издиктуулукту улантуу" ;
    2. Элементтерди издөө тапшырмалары;
    3. Массив элементтерин сорттоо менен байланышкан көйгөйлөр.
  2. Эки өлчөмдүү массивдер

    1. “Форма матрицасын түзүү” тапшырмалары ;
    2. "Элементтерди күтүлбөгөн жерден табыңыз (саптар, мамычалар, диагоналдар)" тапшырмалары ;
    3. Тапшырмалар "Кемелерди суудагы салгылашууга уюштуруу . "
Бардык маселелер үчүн биз бүтүн сандардын массивдерин колдонобуз. Бир өлчөмдүү жана эки өлчөмдүү массивдерди камтыган маселелерди чечүү - 1

Бир өлчөмдүү массивдерди камтыган маселелер

Ырааттуулукту улантыңыз

Бул тапшырмалар сериясында сизге керек болот:
  1. Тигил же бул сандык ырааттуулук кандай калыптанганын аныктагыла.
  2. Берилген катардын биринчи N элементин бүтүн массив катары түзгөн жана массивдин элементтерин экранга чыгарган функцияны жазыңыз.
Биздин алдыбызда төмөнкү сандар сериясын улантуу милдети турат дейли:

1, 2, 3, 4, 5…
1-кадам: үлгүнү аныктоо. Бул жерде баары elementрдык - бул натурал сандардын сериясы. 2-кадам: Берилген катардын биринчи N элементин массив түрүндө түзө турган функцияны жазыңыз:
public class Main {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(createArrayOfIntegers(10)));

        // Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }

    public static int[] createArrayOfIntegers(int n) {
        int[] array = new int[n];
        for (int i = 1; i <= n; i++) {
            array[i-1] = i;
        }

        return array;
    }
}
Ошо сыяктуу эле, төмөнкү ырааттуулукту уланта турган функцияларды жазуу керек:

A. 2,  4,  6,   8,  10...
B. 1,  3,  5,   7,   9...
C. 1,  4,  9,  16,  25...
D. 1,  8, 27,  64, 125...
E. 1, -1,  1,  -1,   1,  -1...
F. 1, -2,  3,  -4,   5,  -6...
G. 1, -4,  9, -16,  25....
H. 1,  0,  2,   0,   3,   0,  4....
I. 1,  2,  6,  24, 120, 720...
J. 1,  1,  2,   3,   5,   8, 13, 21…

Элементтерди издөө

Бул тапшырмалар сериясында даяр массивден кандайдыр бир касиеттерге ээ элементти табуу керек. Мисалы, максималдуу мааниге ээ элемент. Көрсөтүү үчүн, келгиле, массивди алган жана массивдеги максималдуу элементтин индексин аныктаган функциянын codeун жазалы, андан кийин бул элементти индекси менен бирге консолго чыгаралы. Мен ошондой эле классты колдонуп, java.util.concurrent.ThreadLocalRandomкокус элементтерден турган берилген узундуктагы бүтүн массивди кантип тез түзө аларыңызды көрсөтөм:
public class Main {

    public static void main(String[] args) {
        int[] array = generateRandomIntArray(10);
        findMax(array);

        /*
        Output:
        Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
        Max element is [1822778873] with index [3]
        */

    }


    public static int[] generateRandomIntArray(int n) {
        int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
        System.out.println("Generated random array: " + Arrays.toString(array));
        return array;
    }

    public static void findMax(int[] array) {
        int maxIndex = 0;
        int max = array[maxIndex];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
                maxIndex = i;
            }
        }

        System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
    }
}
Эми милдеттери өздөрү. Кокус бүтүн элементтердин массивинен биз табышыбыз керек:
  1. Максималдуу.
  2. Минималдуу.
  3. Орто арифметикалык.
  4. Максималдуу жана минималдуу элементтердин ортосундагы элементтердин саны.
  5. Биринчи жөнөкөй сан.
  6. Акыркы жөнөкөй сан.
  7. Массивдеги жөнөкөй сандардын саны.
Сиз маанини да, индекстерди да көрсөтө аласыз. Эгерде сиз издеп жаткан эч кандай элемент жок болсо, аны өзүңүзгө ыңгайлуу учурда экранда көрсөтүңүз. Акыркы тапшырма үчүн, өсүү тартибинде иреттелген бүтүн элементтердин массивин даярдашыңыз керек. Бул массивде сиз минималдуу операциялардын саны боюнча элементти табышыңыз керек ( Ишара ).

Сорттоо

Бул маселелердин сериясында ар кандай сорттоо алгоритмдерин колдонуу менен бүтүн элементтердин массивдерин сорттоо керек. Интернетте ар кандай алгоритмдер боюнча көптөгөн материалдар бар. Алгач алгоритмдин маңызын түшүнүүгө аракет кылыңыз, анан аны өзүңүз ишке ашырууга аракет кылыңыз. Адегенде кагазда (блок-схема, псевдоcode, сизге ылайыктуу), андан кийин IDEA. Ишке ашыруу үчүн алгоритмдер:
  • көбүктүү сорттоо;
  • тандоо сорту;
  • киргизүү сорту;
  • бириктирүү сорту.

Эки өлчөмдүү массивдерди камтыган маселелер

Матрицаны тартыңыз

Тапшырмалардын кийинки катарларында белгилүү бир жол менен түзүлгөн эки өлчөмдүү массивдерди (матрицаларды) чийүү (консолго чыгаруу) керек: алар тапшырмада көрсөтүлгөн үлгүгө туура келиши керек. Мен бир мисал келтирейин. Биз форманын матрицасын куруп, көрсөтүшүбүз керек m*n(бул жерде mкатарлардын саны, ал эми nкатардагы элементтердин саны):

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Келгиле, биз үчүн бардыгын жасай турган функцияны жазалы, ошондой эле консолго матрицаны сонун чыгара турган функцияны берели (сизге пайдалуу болушу мүмкүн):
public class Main {

    public static void main(String[] args) {
        createAndDrawMatrix(3, 4);

    }

    public static void createAndDrawMatrix(int m, int n) {
        int[][] matrix = new int[m][n];

        int value = 1;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = value;
                value ++;
            }
        }

        printMatrix(matrix);
    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%3d", anInt));
            }
            System.out.println();
        }
    }
}
m*nЭми тапшырмалар: Форманын матрицасын көрсөтүү : 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1

Элементтерди издөө

Бул бөлүмдө матрицанын ар кайсы бөлүктөрүндө ар кандай элементтерди издөөнү ишке ашыруу зарыл: белгилүү бир тилкеде же белгилүү бир катарда. Бизде форманын матрицасы бар дейли: -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35 Мисал катары үчүнчү катардагы терс элементтердин санын табалы:
public class Main {

    public static void main(String[] args) {
        int [][] matrix = {
                { -1,   2,   -3,    4,   -5,    6,   -7},
                {  8,  -9,   10,  -11,   12,  -13,   14},
                {-15,  16,  -17,   18,  -19,   20,  -21},
                { 22, -23,   24,  -25,   26,  -27,   28},
                {-29,  30,  -31,   32,  -33,   34,  -35}
        };

        findNegativeCountInRow(matrix, 3);
    }

    private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
        int negativeCount = 0;
        for (int element : matrix[rowNumber]){
            if (element < 0) {
                negativeCount ++;
            }
        }

        System.out.println("Matrix: ");
        printMatrix(matrix);
        System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));

    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%5d", anInt));
            }
            System.out.println();
        }
    }
}
Негизги ыкманы аткаруунун натыйжасында консолго төмөндөгүлөр чыгарылат:

Matrix: 
   -1    2   -3    4   -5    6   -7
    8   -9   10  -11   12  -13   14
  -15   16  -17   18  -19   20  -21
   22  -23   24  -25   26  -27   28
  -29   30  -31   32  -33   34  -35
Has 3 negative elements in #3 row 
Эми милдеттер. Кандайдыр бир кызык болсо, форманын nматрицасын басып чыгарыңыз :n*n

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Бул матрицадан:
  • бардык терс элементтер;
  • саптагы бардык терс элементтер i;
  • тилкедеги бардык терс элементтер j;
  • бардык диагоналдык элементтери (жогорку сол бурчтан баштап);
  • бардык диагоналдык элементтери (төмөнкү сол бурчтан баштап).

Деңиз согушу

Жылдызча менен акыркы бөлүм: кеңештер же мисалдар жок. Матрицалар деңиз согушу оюнун программалоо үчүн идеалдуу. Бул оюнду программалоонун этаптарынын бири - оюн талаасында кемелерди жайгаштыруу. Эгер сиз бул маселелердин бир нечесин чечсеңиз, анда деңиз согушу менен күрөшө аласыз деп ишениңиз. Ошентип, нөлдөн турган 10x10 матрица берилген. Бул деңиз согушу үчүн талаа деп ойлойлу. Бул талаада 0 - бош уяча, 1 - кеме же кеменин бир бөлүгү. Функцияларды жазыңыз, алардын ар бири деңиз согушунун эрежелерине ылайык, аларды туш келди жайгаштырышат:
  • 10 бир палубалуу кеме;
  • 10 эки кабаттуу корбал;
  • 5 үч кабаттуу кеме;
  • деңиз согушу оюну үчүн бардык кемелерди уюштурат (4 бир палубалуу, 3 эки палубалуу, 2 үч палубалы, 1 төрт палубалуу).
Баары болду! Ар кандай программалоо темасындай эле, массивдерди практика аркылуу жакшы үйрөнүшөт. Бактылуу жылытуу!
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION