JavaRush /Java blogi /Random-UZ /Bir o'lchovli va ikki o'lchovli massivlar bilan bog'liq m...
Анзор Кармов
Daraja
Санкт-Петербург

Bir o'lchovli va ikki o'lchovli massivlar bilan bog'liq masalalarni yechish

Guruhda nashr etilgan
Ushbu maqola massivlar bilan bog'liq muammolarni ko'rib chiqadi (va ko'proq darajada mustaqil tahlilni ta'minlaydi). Biz quyidagi yo'nalishlar bo'yicha malakamizni oshiramiz:
  1. Bir o'lchovli massivlar

    1. Muammolar "ketma-ketlikni davom ettirish" ;
    2. Elementlarni qidirish vazifalari;
    3. Massiv elementlarini saralash bilan bog'liq muammolar.
  2. Ikki o'lchovli massivlar

    1. "Shakl matritsasini qurish" vazifalari ;
    2. Vazifalar "Elementlarni eng kutilmagan joylarda toping (satrlar, ustunlar, diagonallar)" ;
    3. Vazifalar "Suv ​​jangi uchun kemalarni tashkil qiling . "
Barcha masalalar uchun biz butun sonlar massivlaridan foydalanamiz. Biz bir o'lchovli va ikki o'lchovli massivlarga oid masalalarni yechamiz - 1

Bir o'lchovli massivlar bilan bog'liq masalalar

Ketma-ketlikni davom ettiring

Ushbu vazifalar seriyasida sizga kerak bo'ladi:
  1. U yoki bu sonlar ketma-ketligi qanday shaklda tuzilganligini aniqlang.
  2. Berilgan ketma-ketlikning birinchi N ta elementini butun sonli massiv shaklida tashkil etuvchi va massiv elementlarini ekranda aks ettiruvchi funksiya yozing.
Faraz qilaylik, oldimizda quyidagi raqamlar qatorini davom ettirish vazifasi turibdi:

1, 2, 3, 4, 5…
1-qadam: Shaklni aniqlang. Bu erda hamma narsa oddiy - bu natural sonlar qatori. 2-qadam: Berilgan qatorning birinchi N ta elementini massiv ko‘rinishida tashkil etuvchi funksiyani yozing:
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;
    }
}
Xuddi shunday, quyidagi ketma-ketlikni davom ettiradigan funktsiyalarni yozish kerak:

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…

Elementlarni qidirish

Ushbu topshiriqlar seriyasida tayyor massivda ba'zi xususiyatlarga ega elementni topish kerak. Masalan, maksimal qiymatga ega element. Namoyish qilish uchun massivni qabul qiladigan va massivdagi maksimal element indeksini aniqlaydigan funksiya kodini yozamiz va keyin bu elementni indeksi bilan birga konsolga chiqaramiz. Shuningdek, men sinfdan foydalanib, qanday qilib java.util.concurrent.ThreadLocalRandomtasodifiy elementlardan iborat ma'lum uzunlikdagi butun sonli massivni tezda yaratishingiz mumkinligini ko'rsataman:
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));
    }
}
Endi vazifalarning o'zi. Tasodifiy butun elementlar qatoridan biz quyidagilarni topishimiz kerak:
  1. Maksimal.
  2. Eng kam.
  3. O'rta arifmetik.
  4. Maksimal va minimal elementlar orasidagi elementlar soni.
  5. Birinchi tub son.
  6. Oxirgi tub son.
  7. Massivdagi tub sonlar soni.
Siz qiymatni ham, indekslarni ham ko'rsatishingiz mumkin. Agar siz izlayotgan element bo'lmasa, uni o'zingizga qulay vaqtda ekranda ko'rsating. Oxirgi vazifa uchun siz o'sish tartibida tartiblangan butun sonli elementlar massivini tayyorlashingiz kerak. Ushbu massivda siz minimal miqdordagi operatsiyalarda qiymat bo'yicha elementni topishingiz kerak ( Maslahat ).

Tartiblash

Ushbu qator masalalarda siz turli xil tartiblash algoritmlaridan foydalangan holda butun sonli elementlar massivlarini saralashingiz kerak. Internetda turli xil algoritmlar bo'yicha juda ko'p materiallar mavjud. Avval algoritmning mohiyatini tushunishga harakat qiling va keyin uni o'zingiz amalga oshirishga harakat qiling. Avval qog'ozda (blok diagrammasi, psevdokod, sizga mos keladigan narsa), keyin esa IDEA-da. Amalga oshirish algoritmlari:
  • qabariqni saralash;
  • tanlash tartibi;
  • kiritish tartibi;
  • birlashtirish tartibi.

Ikki o'lchovli massivlar bilan bog'liq masalalar

Matritsani chizing

Keyingi qator vazifalarda ma'lum bir tarzda tuzilgan ikki o'lchovli massivlarni (matritsalarni) chizish (konsolga chiqarish) kerak: ular topshiriqda ko'rsatilgan naqshga mos kelishi kerak. Sizga bir misol keltiraman. Formaning matritsasini qurishimiz va ko'rsatishimiz kerak m*n(bu erda mqatorlar soni va nqatordagi elementlar soni):

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Keling, biz uchun hamma narsani bajaradigan funktsiyani yozaylik, shuningdek, matritsani konsolga chiroyli tarzda chiqaradigan funktsiyani taqdim etamiz (siz buni foydali deb topishingiz mumkin):
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*nEndi vazifalar: Shakl matritsasini ko'rsatish : 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

Elementlarni qidirish

Ushbu bo'limda matritsaning turli qismlarida turli elementlarni qidirishni amalga oshirish kerak: ma'lum bir ustunda yoki ma'lum bir qatorda. Faraz qilaylik, bizda shakl matritsasi bor: -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 Misol tariqasida uchinchi qatordagi manfiy elementlar sonini topamiz:
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();
        }
    }
}
Asosiy usulni bajarish natijasida konsolga quyidagilar chiqariladi:

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 
Endi vazifalar. Har qanday g'alati uchun, shaklning nmatritsasini chop eting :n*n

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Ushbu matritsadan kelib chiqadi:
  • barcha salbiy elementlar;
  • satrdagi barcha salbiy elementlar i;
  • ustundagi barcha salbiy elementlar j;
  • barcha diagonal elementlar (yuqori chap burchakdan boshlab);
  • barcha diagonal elementlar (pastki chap burchakdan boshlab).

Dengiz jangi

Yulduzcha bilan oxirgi bo'lim: maslahatlar yoki misollar yo'q. Matritsalar dengiz jangi o'yinini dasturlash uchun ideal. Ushbu o'yinni dasturlash bosqichlaridan biri kemalarni o'yin maydoniga joylashtirishdir. Agar siz ushbu muammolarni hal qilsangiz, dengiz janglarini engishingizga ishonch hosil qiling. Demak, nollardan tashkil topgan 10x10 matritsa berilgan. Faraz qilaylik, bu dengiz jangi uchun maydon. Bu sohada 0 - bo'sh katak, 1 - kema yoki kemaning bir qismi. Vazifalarni yozing, ularning har biri dengiz jangi o'yini qoidalariga ko'ra ularni tasodifiy joylashtiradi:
  • 10 ta bitta qavatli kemalar;
  • 10 ta ikki qavatli korballar;
  • 5 ta uch qavatli kemalar;
  • dengiz jangi o'yiniga barcha kemalarni tartibga soladi (4 ta bitta qavatli, 3 ta ikki qavatli, 2 ta uch qavatli, 1 ta to'rt qavatli).
Ana xolos! Har qanday dasturlash mavzusida bo'lgani kabi, massivlarni amaliyot orqali o'rganish yaxshidir. Baxtli isinish!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION