JavaRush /Java Blog /Random-ID /Memecahkan masalah yang melibatkan array satu dimensi dan...
Анзор Кармов
Level 31
Санкт-Петербург

Memecahkan masalah yang melibatkan array satu dimensi dan dua dimensi

Dipublikasikan di grup Random-ID
Artikel ini akan mempertimbangkan (dan, pada tingkat yang lebih luas, memberikan analisis independen) masalah yang melibatkan array. Kami akan meningkatkan keterampilan kami di bidang-bidang berikut:
  1. Array satu dimensi

    1. Soal “Lanjutkan urutannya” ;
    2. Tugas pencarian elemen;
    3. Masalah yang melibatkan pengurutan elemen array.
  2. Array dua dimensi

    1. Tugas “Membangun matriks bentuk” ;
    2. Tugas “Menemukan elemen di tempat yang paling tidak terduga (baris, kolom, diagonal)” ;
    3. Tugas “Mengatur kapal untuk pertempuran air . ”
Untuk semua soal kita akan menggunakan array bilangan bulat. Kami memecahkan masalah pada array satu dimensi dan dua dimensi - 1

Masalah yang melibatkan array satu dimensi

Lanjutkan urutannya

Dalam rangkaian tugas ini Anda perlu:
  1. Tentukan pola yang membentuk barisan numerik tertentu.
  2. Tulis fungsi yang membentuk N elemen pertama dari barisan tertentu sebagai array bilangan bulat dan menampilkan elemen array di layar.
Misalkan kita dihadapkan pada tugas melanjutkan deret bilangan berikut:

1, 2, 3, 4, 5…
Langkah 1: Identifikasi polanya. Segala sesuatu di sini adalah dasar - ini adalah serangkaian bilangan asli. Langkah 2: tulis fungsi yang akan membentuk N elemen pertama dari baris tertentu sebagai array:
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;
    }
}
Demikian pula, perlu untuk menulis fungsi yang melanjutkan 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 rangkaian tugas ini, perlu untuk menemukan elemen dalam array jadi yang memiliki beberapa properti. Misalnya elemen dengan nilai maksimal. Untuk mendemonstrasikannya, mari kita tulis kode untuk fungsi yang mengambil array dan menentukan indeks elemen maksimum dalam array, lalu mengeluarkan elemen ini beserta indeksnya ke konsol. Saya juga akan mendemonstrasikan bagaimana, dengan menggunakan kelas ini, java.util.concurrent.ThreadLocalRandomAnda dapat dengan cepat menghasilkan array integer dengan panjang tertentu, yang terdiri dari elemen acak:
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 tugasnya sendiri. Dari array elemen bilangan bulat acak kita perlu mencari:
  1. Maksimum.
  2. Minimum.
  3. Rata-rata.
  4. Jumlah elemen antara elemen maksimum dan minimum.
  5. Bilangan prima pertama.
  6. Bilangan prima terakhir.
  7. Banyaknya bilangan prima dalam array.
Anda dapat menampilkan nilai dan indeks. Jika tidak ada elemen yang Anda cari, tampilkan di layar sesuai keinginan. Untuk tugas terakhir, Anda perlu menyiapkan array elemen integer yang diurutkan dalam urutan menaik. Dalam array ini, Anda perlu mencari elemen berdasarkan nilai dalam jumlah operasi minimum ( Petunjuk ).

Penyortiran

Dalam rangkaian soal ini, Anda perlu mengurutkan array elemen bilangan bulat menggunakan berbagai algoritma pengurutan. Ada cukup banyak materi di Internet tentang berbagai algoritma. Cobalah untuk memahami esensi algoritmanya terlebih dahulu, lalu coba terapkan sendiri. Pertama di atas kertas (diagram blok, pseudocode, apa pun yang cocok untuk Anda), dan kemudian di IDEA. Algoritma implementasi:
  • semacam gelembung;
  • pengurutan pilihan;
  • semacam penyisipan;
  • menggabungkan semacam.

Masalah yang melibatkan array dua dimensi

Gambarkan matriksnya

Dalam rangkaian tugas berikutnya, perlu untuk menggambar (mengeluarkan ke konsol) array dua dimensi (matriks) yang disusun dengan cara tertentu: array tersebut harus sesuai dengan pola yang ditentukan oleh tugas. Izinkan saya memberi Anda sebuah contoh. Kita perlu membuat dan menampilkan matriks m*n(yang mmerupakan jumlah baris dan njumlah elemen dalam baris) dalam bentuk:

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Mari kita tulis sebuah fungsi yang akan melakukan segalanya untuk kita, dan juga menyediakan fungsi yang akan menampilkan matriks dengan indah ke konsol (Anda mungkin merasa 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();
        }
    }
}
Sekarang tugasnya: Menampilkan matriks m*ndalam bentuk: 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

Pada bagian ini, perlu dilakukan pencarian berbagai elemen di berbagai bagian matriks: di kolom tertentu atau di baris tertentu. Anggaplah kita mempunyai matriks dengan 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, carilah banyaknya elemen negatif pada 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();
        }
    }
}
Sebagai hasil dari mengeksekusi metode utama, berikut ini akan menjadi output ke 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 tugasnya. Untuk bilangan ganjil, ncetak matriks n*ndalam bentuk:

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Dari matriks ini diperoleh:
  • semua elemen negatif;
  • semua elemen negatif dalam string i;
  • semua elemen negatif pada kolom j;
  • semua elemen diagonal (mulai dari pojok kiri atas);
  • semua elemen diagonal (mulai dari pojok kiri bawah).

Pertempuran laut

Bagian terakhir dengan tanda bintang: tidak ada tip atau contoh. Matriks ideal untuk memprogram permainan pertempuran laut. Salah satu tahapan pemrograman permainan ini adalah penempatan kapal di lapangan permainan. Jika Anda mengatasi sejumlah masalah ini, yakinlah bahwa Anda akan mampu mengatasi pertempuran laut. Jadi, diberikan matriks 10x10 yang terdiri dari nol. Mari kita asumsikan bahwa ini adalah lapangan untuk bermain pertempuran laut. Di bidang ini, 0 adalah sel kosong, 1 adalah kapal atau bagian dari kapal. Tuliskan fungsi-fungsi yang masing-masing, menurut aturan permainan pertempuran laut, tempatkan secara acak:
  • 10 kapal dek tunggal;
  • 10 korbal tingkat ganda;
  • 5 kapal tiga tingkat;
  • mengatur semua kapal untuk permainan pertempuran laut (4 dek tunggal, 3 dek ganda, 2 dek tiga, 1 dek empat).
Itu saja! Seperti halnya topik pemrograman lainnya, array paling baik dipelajari melalui latihan. Selamat pemanasan!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION