JavaRush /Java блогы /Random-KK /Бір өлшемді және екі өлшемді массивтерге есептер шығару
Анзор Кармов
Деңгей
Санкт-Петербург

Бір өлшемді және екі өлшемді массивтерге есептер шығару

Топта жарияланған
Бұл мақалада массивтерге қатысты мәселелер қарастырылады (және көбірек дәрежеде тәуелсіз талдау қарастырылады). Біз келесі бағыттар бойынша өз дағдыларымызды жетілдіреміз:
  1. Бір өлшемді массивтер

    1. Есептер «Тізімді жалғастыру» ;
    2. Элементтерді іздеу тапсырмалары;
    3. Жиым элементтерін сұрыптаумен байланысты есептер.
  2. Екі өлшемді массивтер

    1. «Пішіннің матрицасын құру» тапсырмалары ;
    2. «Ең күтпеген жерден элементтерді табу (жолдар, бағандар, диагональдар)» тапсырмалары ;
    3. Тапсырмалар «Кемелерді су шайқасына орналастырыңыз » .
Барлық есептер үшін біз бүтін сандардың массивтерін қолданамыз. Бір өлшемді және екі өлшемді массивтерге есептер шығару – 1

Бір өлшемді массивтерге қатысты есептер

Тізбекті жалғастырыңыз

Бұл тапсырмалар сериясында сізге қажет:
  1. Осы немесе басқа сандық реттілік қалыптасатын заңдылықты анықтаңыз.
  2. Берілген тізбектің бірінші N элементін бүтін массив ретінде құрайтын және жиым элементтерін экранға шығаратын функцияны жазыңыз.
Алдымызда келесі сандар қатарын жалғастыру міндеті тұр делік:

1, 2, 3, 4, 5…
1-қадам: Үлгіні анықтаңыз. Мұнда бәрі қарапайым - бұл натурал сандар қатары. 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;
  • барлық диагональды элементтер (жоғарғы сол жақ бұрыштан бастап);
  • барлық диагональ элементтері (төменгі сол жақ бұрыштан бастап).

Теңіз соғысы

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