JavaRush /Java Blogu /Random-AZ /Birölçülü və ikiölçülü massivləri əhatə edən məsələlərin ...
Анзор Кармов
Səviyyə
Санкт-Петербург

Birölçülü və ikiölçülü massivləri əhatə edən məsələlərin həlli

Qrupda dərc edilmişdir
Bu məqalə massivləri əhatə edən problemləri nəzərdən keçirəcək (və daha çox, müstəqil təhlili təmin edəcəkdir). Aşağıdakı sahələrdə bacarıqlarımızı təkmilləşdirəcəyik:
  1. Birölçülü massivlər

    1. Problemlər "Ardıcıllığı davam etdirin" ;
    2. Element axtarış tapşırıqları;
    3. Massiv elementlərinin çeşidlənməsi ilə bağlı problemlər.
  2. İki ölçülü massivlər

    1. Tapşırıqlar "Formanın matrisini qurun" ;
    2. Tapşırıqlar "Ən gözlənilməz yerlərdə elementləri tapın (sətirlər, sütunlar, diaqonallar)" ;
    3. Tapşırıqlar "Gəmiləri su döyüşü üçün təşkil edin . "
Bütün problemlər üçün biz tam ədədlərdən ibarət massivlərdən istifadə edəcəyik. Birölçülü və ikiölçülü massivlər üzrə məsələləri həll edirik - 1

Birölçülü massivlərlə bağlı problemlər

Ardıcıllığı davam etdirin

Bu tapşırıqlar silsiləsində sizə lazım olacaq:
  1. Bu və ya digər ədədi ardıcıllığın yarandığı nümunəni müəyyənləşdirin.
  2. Verilmiş ardıcıllığın ilk N elementini tam ədəd kimi təşkil edən və massiv elementlərini ekranda göstərən funksiyanı yazın.
Tutaq ki, qarşımızda aşağıdakı nömrələr seriyasını davam etdirmək vəzifəsi var:

1, 2, 3, 4, 5…
Addım 1: Nümunəni müəyyənləşdirin. Burada hər şey elementardır - təbii ədədlər silsiləsi. Addım 2: Verilmiş cərgənin ilk N elementini massiv kimi formalaşdıracaq funksiya yazı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;
    }
}
Eynilə, aşağıdakı ardıcıllığı davam etdirəcək funksiyaları yazmaq lazımdır:

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…

Elementləri axtarın

Bu tapşırıqlar silsiləsində bitmiş massivdə bəzi xüsusiyyətlərə malik elementi tapmaq lazımdır. Məsələn, maksimum dəyəri olan element. Nümayiş etmək üçün massiv götürən və massivdəki maksimum elementin indeksini təyin edən funksiyanın kodunu yazaq və sonra bu elementi indeksi ilə birlikdə konsola çıxaraq. Mən həmçinin sinifdən istifadə edərək java.util.concurrent.ThreadLocalRandomtəsadüfi elementlərdən ibarət verilmiş uzunluqda tam ədədlər massivini necə tez yarada biləcəyinizi nümayiş etdirəcəyəm:
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));
    }
}
İndi vəzifələrin özləri. Təsadüfi tam elementlər massivindən tapmalıyıq:
  1. Maksimum.
  2. Minimum.
  3. Orta.
  4. Maksimum və minimum elementlər arasındakı elementlərin sayı.
  5. İlk sadə ədəd.
  6. Sonuncu sadə ədəd.
  7. Massivdəki sadə ədədlərin sayı.
Siz həm dəyəri, həm də indeksləri göstərə bilərsiniz. Əgər axtardığınız heç bir element yoxdursa, onu rahatlıqla ekranda göstərin. Son tapşırıq üçün artan qaydada çeşidlənmiş tam elementlər massivi hazırlamalısınız. Bu massivdə minimum sayda əməliyyatda dəyərə görə element tapmaq lazımdır ( İpucu ).

Çeşidləmə

Bu problemlər silsiləsində siz müxtəlif çeşidləmə alqoritmlərindən istifadə edərək tam ədəd elementləri massivini çeşidləməlisiniz. İnternetdə müxtəlif alqoritmlər üzrə kifayət qədər çoxlu materiallar var. Əvvəlcə alqoritmin mahiyyətini anlamağa çalışın, sonra özünüz həyata keçirməyə çalışın. Əvvəlcə kağız üzərində (blok diaqram, psevdokod, sizə nə uyğun gəlirsə), sonra isə IDEA-da. İcra alqoritmləri:
  • qabarcıq çeşidi;
  • seçim çeşidi;
  • daxiletmə çeşidi;
  • birləşmə çeşidi.

İkiölçülü massivlərlə bağlı problemlər

Matrisi çəkin

Növbəti tapşırıqlar seriyasında müəyyən bir şəkildə tərtib edilmiş iki ölçülü massivləri (matrisləri) çəkmək (konsola çıxarmaq) lazımdır: onlar tapşırığın göstərdiyi nümunəyə uyğun olmalıdır. Sizə bir misal deyim. m*nFormanın matrisini (burada msətirlərin sayı və nsətirdəki elementlərin sayıdır) qurmalı və göstərməliyik :

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Gəlin bizim üçün hər şeyi edəcək bir funksiya yazaq, həmçinin matrisi konsola gözəl şəkildə çıxaracaq bir funksiya təqdim edək (sizə faydalı ola bilər):
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İndi tapşırıqlar: Formanın matrisini göstərin : 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

Elementləri axtarın

Bu bölmədə matrisin müxtəlif hissələrində müxtəlif elementlərin axtarışını həyata keçirmək lazımdır: müəyyən bir sütunda və ya müəyyən bir sıra. Fərz edək ki, bizdə forma matrisi var: -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 Nümunə olaraq üçüncü sətirdəki mənfi elementlərin sayını tapaq:
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();
        }
    }
}
Əsas metodun icrası nəticəsində konsola aşağıdakılar çıxacaq:

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 
İndi vəzifələr. İstənilən qəribə üçün formanın nmatrisini çap edin :n*n

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Bu matrisdən əldə edin:
  • bütün mənfi elementlər;
  • sətirdəki bütün mənfi elementlər i;
  • sütundakı bütün mənfi elementlər j;
  • bütün diaqonal elementlər (yuxarı sol küncdən başlayaraq);
  • bütün diaqonal elementlər (aşağı sol küncdən başlayaraq).

Dəniz döyüşü

Ulduz işarəsi olan son bölmə: heç bir məsləhət və ya nümunə yoxdur. Matrislər dəniz döyüşü oyununu proqramlaşdırmaq üçün idealdır. Bu oyunun proqramlaşdırılmasının mərhələlərindən biri gəmilərin oyun meydançasında yerləşdirilməsidir. Bu problemlərin bir sırasını həll etsəniz, əmin olun ki, dəniz döyüşlərinin öhdəsindən gələcəksiniz. Beləliklə, sıfırlardan ibarət 10x10 matris verilmişdir. Fərz edək ki, bura dəniz döyüşü meydanıdır. Bu sahədə 0 boş xana, 1 gəmi və ya gəminin bir hissəsidir. Hər biri dəniz döyüşü oyununun qaydalarına uyğun olaraq onları təsadüfi olaraq yerləşdirən funksiyaları yazın:
  • 10 tək göyərtəli gəmi;
  • 10 iki qatlı korballar;
  • 5 üçmərtəbəli gəmi;
  • bütün gəmiləri dəniz döyüşü oyunu üçün təşkil edir (4 tək göyərtəli, 3 ikiqat göyərtəli, 2 üç göyərtəli, 1 dörd göyərtəli).
Hamısı budur! Hər hansı bir proqramlaşdırma mövzusunda olduğu kimi, massivlər ən yaxşı şəkildə təcrübə vasitəsilə öyrənilir. Xoşbəxt istiləşmə!
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION