JavaRush /Блоги Java /Random-TG /Ҳалли масъалаҳое, ки массивҳои якченака ва дученака доран...
Анзор Кармов
Сатҳи
Санкт-Петербург

Ҳалли масъалаҳое, ки массивҳои якченака ва дученака доранд

Дар гурӯҳ нашр шудааст
Ин мақола масъалаҳои марбут ба массивҳоро баррасӣ хоҳад кард (ва ба андозаи бештар таҳлor мустақилро пешбинӣ мекунад). Мо малакаҳои худро дар самтҳои зерин такмил медиҳем:
  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;
  • ҳамаи унсурҳои диагоналӣ (аз кунҷи чапи болои сар карда);
  • ҳама унсурҳои диагоналӣ (аз кунҷи чапи поёни сар карда).

Ҷанги баҳр

Қисми охирин бо ситорача: ҳеҷ маслиҳат ё мисол. Матритсаҳо барои барномасозии бозии ҷанги баҳрӣ беҳтаринанд. Яке аз марҳилаҳои барномасозии ин бозӣ ҷойгир кардани киштиҳо дар майдони бозӣ мебошад. Агар шумо як қатор ин мушкилотро ҳал кунед, итминон ҳосил кунед, ки шумо метавонед бо ҷангҳои баҳрӣ мубориза баред. Ҳамин тавр, матритсаи 10x10, ки аз сифрҳо иборат аст, дода мешавад. Фарз мекунем, ки он майдони ҷанги баҳрӣ аст. Дар ин майдон 0 ячейкаи холӣ, 1 киштӣ ё қисми киштӣ аст. Функсияҳоро нависед, ки ҳар яки онҳо мувофиқи қоидаҳои бозии баҳрӣ онҳоро ба таври тасодуфӣ ҷойгир мекунанд:
  • 10 киштии якқабатӣ;
  • 10 корбалли дуошёна;
  • 5 киштии сеошёна;
  • тамоми киштиҳоро барои бозии ҷанги баҳрӣ (4 яккаҳвора, 3 паҳлӯи дутабор, 2 саҳни сеошёна, 1 саҳни чор саҳни) ташкил мекунад.
Ҳамааш ҳамин! Мисли ҳама гуна мавзӯъҳои барномасозӣ, массивҳо беҳтарин тавассути амалия омӯхта мешаванд. Гармкунӣ муборак!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION