JavaRush /Blog Java /Random-MS /Menyelesaikan masalah yang melibatkan tatasusunan satu di...
Анзор Кармов
Tahap
Санкт-Петербург

Menyelesaikan masalah yang melibatkan tatasusunan satu dimensi dan dua dimensi

Diterbitkan dalam kumpulan
Artikel ini akan mempertimbangkan (dan, pada tahap yang lebih besar, menyediakan analisis bebas) masalah yang melibatkan tatasusunan. Kami akan meningkatkan kemahiran kami dalam bidang berikut:
  1. Tatasusunan satu dimensi

    1. Masalah "Teruskan urutan" ;
    2. Tugas carian elemen;
    3. Masalah yang melibatkan pengisihan elemen tatasusunan.
  2. Tatasusunan dua dimensi

    1. Tugasan "Membina matriks borang" ;
    2. Tugasan "Cari elemen di tempat yang paling tidak dijangka (baris, lajur, pepenjuru)" ;
    3. Tugasan "Atur kapal untuk pertempuran air . "
Untuk semua masalah kami akan menggunakan tatasusunan integer. Menyelesaikan masalah yang melibatkan tatasusunan satu dimensi dan dua dimensi - 1

Masalah yang melibatkan tatasusunan satu dimensi

Teruskan urutan

Dalam siri tugasan ini anda perlu:
  1. Tentukan corak mengikut mana urutan berangka ini atau itu terbentuk.
  2. Tulis fungsi yang membentuk elemen N pertama bagi jujukan yang diberikan sebagai tatasusunan integer dan memaparkan elemen tatasusunan pada skrin.
Katakan kita berhadapan dengan tugas untuk meneruskan siri nombor berikut:

1, 2, 3, 4, 5…
Langkah 1: Kenal pasti corak. Semuanya di sini adalah asas - ia adalah siri nombor asli. Langkah 2: tulis fungsi yang akan membentuk elemen N pertama baris yang diberikan sebagai tatasusunan:
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;
    }
}
Begitu juga, adalah perlu untuk menulis fungsi yang akan meneruskan urutan berikut:

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…

Cari elemen

Dalam siri tugasan ini, adalah perlu untuk mencari elemen dalam tatasusunan siap yang mempunyai beberapa sifat. Sebagai contoh, elemen dengan nilai maksimum. Untuk menunjukkan, mari tulis kod untuk fungsi yang mengambil tatasusunan dan menentukan indeks elemen maksimum dalam tatasusunan, dan kemudian mengeluarkan elemen ini bersama-sama indeksnya ke konsol. Saya juga akan menunjukkan bagaimana, menggunakan kelas, java.util.concurrent.ThreadLocalRandomanda boleh menjana tatasusunan integer dengan panjang tertentu, yang terdiri daripada unsur rawak:
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));
    }
}
Sekarang tugasan itu sendiri. Daripada tatasusunan unsur integer rawak kita perlu mencari:
  1. maksimum.
  2. Minimum.
  3. Purata.
  4. Bilangan elemen antara unsur maksimum dan minimum.
  5. Nombor perdana pertama.
  6. Nombor perdana terakhir.
  7. Bilangan nombor perdana dalam tatasusunan.
Anda boleh memaparkan kedua-dua nilai dan indeks. Jika tiada elemen yang anda cari, paparkan pada skrin mengikut keselesaan anda. Untuk tugasan terakhir, anda perlu menyediakan tatasusunan elemen integer yang diisih dalam tertib menaik. Dalam tatasusunan ini, anda perlu mencari elemen mengikut nilai dalam bilangan operasi minimum ( Hint ).

Menyusun

Dalam siri masalah ini, anda perlu mengisih tatasusunan elemen integer menggunakan pelbagai algoritma pengisihan. Terdapat banyak bahan di Internet mengenai pelbagai algoritma. Cuba fahami intipati algoritma dahulu, dan kemudian cuba laksanakannya sendiri. Pertama di atas kertas (rajah blok, pseudokod, apa sahaja yang sesuai dengan anda), dan kemudian dalam IDEA. Algoritma untuk pelaksanaan:
  • jenis gelembung;
  • jenis pemilihan;
  • jenis sisipan;
  • merge sort.

Masalah yang melibatkan tatasusunan dua dimensi

Lukiskan matriks

Dalam siri tugasan seterusnya, adalah perlu untuk melukis (output ke konsol) tatasusunan dua dimensi (matriks) yang digubah dengan cara tertentu: mereka mesti sepadan dengan corak yang ditentukan oleh tugasan. Biar saya berikan satu contoh. Kita perlu membina dan memaparkan matriks m*n(di mana mbilangan baris, dan nbilangan elemen dalam baris) borang:

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Mari tulis fungsi yang akan melakukan segala-galanya untuk kita, dan juga memberikan fungsi yang akan mengeluarkan matriks dengan indah ke konsol (anda mungkin mendapati ia berguna):
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();
        }
    }
}
Tugasan sekarang: Paparkan matriks m*nborang: 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

Cari elemen

Dalam bahagian ini, adalah perlu untuk melaksanakan carian untuk pelbagai elemen dalam bahagian matriks yang berlainan: dalam lajur tertentu atau dalam baris tertentu. Mari kita anggap kita mempunyai matriks bentuk: -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 Sebagai contoh, mari kita cari bilangan unsur negatif dalam baris ketiga:
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();
        }
    }
}
Hasil daripada melaksanakan kaedah utama, berikut akan dikeluarkan kepada konsol:

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 
Sekarang tugasan. Untuk sebarang ganjil, ncetak matriks n*nborang:

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Daripada matriks ini, terbitkan:
  • semua unsur negatif;
  • semua unsur negatif dalam rentetan i;
  • semua unsur negatif dalam lajur j;
  • semua elemen pepenjuru (bermula dari sudut kiri atas);
  • semua elemen pepenjuru (bermula dari sudut kiri bawah).

Pertempuran laut

Bahagian terakhir dengan asterisk: tiada petua atau contoh. Matriks sesuai untuk memprogramkan permainan pertempuran laut. Salah satu peringkat pengaturcaraan permainan ini ialah penempatan kapal di padang permainan. Jika anda menyelesaikan beberapa masalah ini, yakinlah bahawa anda akan dapat menghadapi pertempuran laut. Jadi, diberi matriks 10x10 yang terdiri daripada sifar. Mari kita anggap bahawa ia adalah medan untuk bermain pertempuran laut. Dalam medan ini, 0 ialah sel kosong, 1 ialah kapal atau sebahagian daripada kapal. Tulis fungsi, setiap satunya, mengikut peraturan permainan pertempuran laut, meletakkannya secara rawak:
  • 10 kapal satu dek;
  • 10 biji kobal dua dek;
  • 5 kapal tiga tingkat;
  • mengatur semua kapal untuk permainan pertempuran laut (4 dek tunggal, 3 dek dua, 2 dek tiga, 1 dek empat).
Itu sahaja! Seperti mana-mana topik pengaturcaraan, tatasusunan paling baik dipelajari melalui latihan. Selamat memanaskan badan!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION