JavaRush /Blog Java /Random-PL /Rozwiązywanie problemów z tablicami jednowymiarowymi i dw...
Анзор Кармов
Poziom 31
Санкт-Петербург

Rozwiązywanie problemów z tablicami jednowymiarowymi i dwuwymiarowymi

Opublikowano w grupie Random-PL
W tym artykule rozważymy (i w większym stopniu umożliwimy niezależną analizę) problemy związane z tablicami. Będziemy doskonalić swoje umiejętności w następujących obszarach:
  1. Tablice jednowymiarowe

    1. Problemy „Kontynuuj sekwencję” ;
    2. Zadania wyszukiwania elementów;
    3. Problemy z sortowaniem elementów tablicy.
  2. Tablice dwuwymiarowe

    1. Zadania „Zbuduj macierz formularza” ;
    2. Zadania „Znajdź elementy w najbardziej nieoczekiwanych miejscach (wiersze, kolumny, przekątne)” ;
    3. Zadania „Ułóż statki do bitwy wodnej ” .
Do wszystkich problemów będziemy używać tablic liczb całkowitych. Rozwiązywanie problemów z tablicami jednowymiarowymi i dwuwymiarowymi - 1

Zagadnienia dotyczące tablic jednowymiarowych

Kontynuuj sekwencję

W tej serii zadań będziesz musiał:
  1. Określ wzór, według którego tworzona jest ta lub inna sekwencja liczbowa.
  2. Napisz funkcję, która tworzy pierwsze N ​​elementów danej sekwencji w postaci tablicy liczb całkowitych i wyświetla elementy tablicy na ekranie.
Załóżmy, że stoimy przed zadaniem kontynuowania następującego szeregu liczbowego:

1, 2, 3, 4, 5…
Krok 1: Zidentyfikuj wzór. Wszystko tutaj jest elementarne - to ciąg liczb naturalnych. Krok 2: napisz funkcję, która utworzy pierwsze N ​​elementów danego wiersza w postaci tablicy:
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;
    }
}
Podobnie należy napisać funkcje, które będą kontynuować następujące sekwencje:

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…

Wyszukaj elementy

W tej serii zadań konieczne jest znalezienie w gotowej tablicy elementu, który ma pewne właściwości. Na przykład element o maksymalnej wartości. Aby to zademonstrować, napiszmy kod funkcji, która pobiera tablicę i określa indeks maksymalnego elementu w tablicy, a następnie wysyła ten element wraz z jego indeksem do konsoli. Pokażę także, jak za pomocą tej klasy java.util.concurrent.ThreadLocalRandommożna szybko wygenerować tablicę liczb całkowitych o zadanej długości, złożoną z losowych elementów:
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));
    }
}
Teraz same zadania. Z tablicy losowych elementów całkowitych musimy znaleźć:
  1. Maksymalny.
  2. Minimum.
  3. Przeciętny.
  4. Liczba elementów pomiędzy elementami maksymalnymi i minimalnymi.
  5. Pierwsza liczba pierwsza.
  6. Ostatnia liczba pierwsza.
  7. Liczba liczb pierwszych w tablicy.
Można wyświetlić zarówno wartość, jak i indeksy. Jeśli nie ma elementu, którego szukasz, wyświetl go na ekranie w dogodnym dla siebie momencie. Do ostatniego zadania należy przygotować tablicę elementów całkowitych posortowanych rosnąco. W tej tablicy musisz znaleźć element według wartości w minimalnej liczbie operacji ( Podpowiedź ).

Sortowanie

W tej serii problemów należy posortować tablicę elementów całkowitych przy użyciu różnych algorytmów sortowania. W Internecie jest całkiem sporo materiałów na temat różnych algorytmów. Spróbuj najpierw zrozumieć istotę algorytmu, a następnie spróbuj go zaimplementować samodzielnie. Najpierw na papierze (schemat blokowy, pseudokod, co Ci pasuje), a potem w IDEA. Algorytmy realizacji:
  • sortowanie bąbelkowe;
  • sortowanie przez wybór;
  • sortowanie przez wstawianie;
  • sortowanie przez scalanie.

Zagadnienia dotyczące tablic dwuwymiarowych

Narysuj macierz

W kolejnej serii zadań należy narysować (wyprowadzić do konsoli) dwuwymiarowe tablice (macierze) złożone w określony sposób: muszą one odpowiadać wzorowi określonemu w zadaniu. Dam ci przykład. Musimy zbudować i wyświetlić macierz m*n(gdzie mto liczba wierszy, a nto liczba elementów w wierszu) postaci:

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Napiszmy funkcję, która zrobi wszystko za nas, a także poda funkcję, która pięknie wyprowadzi macierz na konsolę (może Ci się przydać):
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();
        }
    }
}
Teraz zadania: Wyświetl macierz m*npostaci: 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

Wyszukaj elementy

W tej sekcji należy zaimplementować wyszukiwanie różnych elementów w różnych częściach macierzy: w określonej kolumnie lub w określonym wierszu. Załóżmy, że mamy macierz postaci: -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 Dla przykładu znajdźmy liczbę elementów ujemnych w trzecim wierszu:
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();
        }
    }
}
W wyniku wykonania metody main na konsolę zostanie wyświetlony następujący komunikat:

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 
Teraz zadania. Dla każdego nieparzystego nwydrukuj macierz n*npostaci:

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
Z tej macierzy wyprowadź:
  • wszystkie elementy negatywne;
  • wszystkie elementy ujemne w ciągu i;
  • wszystkie elementy ujemne w kolumnie j;
  • wszystkie elementy ukośne (zaczynając od lewego górnego rogu);
  • wszystkie elementy ukośne (zaczynając od lewego dolnego rogu).

Bitwa morska

Ostatnia sekcja oznaczona gwiazdką: brak wskazówek i przykładów. Matryce idealnie nadają się do programowania gry w bitwę morską. Jednym z etapów programowania tej gry jest rozmieszczenie statków na polu gry. Jeśli rozwiążesz wiele z tych problemów, możesz być pewien, że poradzisz sobie w walce morskiej. Zatem biorąc pod uwagę macierz 10x10 składającą się z zer. Załóżmy, że jest to pole do rozgrywania bitew morskich. W tym polu 0 to pusta komórka, 1 to statek lub część statku. Napisz funkcje, z których każda, zgodnie z zasadami gry w bitwę morską, losowo je rozmieści:
  • 10 statków jednopokładowych;
  • 10 korbali dwupokładowych;
  • 5 statków trójpokładowych;
  • organizuje wszystkie statki do gry w bitwie morskiej (4 jednopokładowe, 3 dwupokładowe, 2 trzypokładowe, 1 czteropokładowy).
To wszystko! Jak w przypadku każdego tematu programowania, tablice najlepiej uczyć się w praktyce. Miłej rozgrzewki!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION