JavaRush /Blog Java /Random-FR /Résoudre des problèmes impliquant des tableaux unidimensi...
Анзор Кармов
Niveau 31
Санкт-Петербург

Résoudre des problèmes impliquant des tableaux unidimensionnels et bidimensionnels

Publié dans le groupe Random-FR
Cet article examinera (et, dans une plus large mesure, fournira une analyse indépendante) les problèmes impliquant les tableaux. Nous améliorerons nos compétences dans les domaines suivants :
  1. Tableaux unidimensionnels

    1. Problèmes « Continuer la séquence » ;
    2. Tâches de recherche d'éléments ;
    3. Problèmes liés au tri des éléments du tableau.
  2. Tableaux bidimensionnels

    1. Tâches « Construire une matrice du formulaire » ;
    2. Tâches « Rechercher des éléments aux endroits les plus inattendus (lignes, colonnes, diagonales) » ;
    3. Tâches « Organiser les navires pour une bataille navale » .
Pour tous les problèmes, nous utiliserons des tableaux d’entiers. Nous résolvons des problèmes sur des tableaux unidimensionnels et bidimensionnels - 1

Problèmes impliquant des tableaux unidimensionnels

Continuer la séquence

Dans cette série de tâches, vous devrez :
  1. Déterminer le modèle selon lequel telle ou telle séquence numérique est formée.
  2. Écrivez une fonction qui forme les N premiers éléments d'une séquence donnée sous forme de tableau d'entiers et affiche les éléments du tableau à l'écran.
Supposons que nous soyons confrontés à la tâche de continuer la série de nombres suivante :

1, 2, 3, 4, 5…
Étape 1 : Identifiez le modèle. Ici, tout est élémentaire : c’est une série de nombres naturels. Étape 2 : écrire une fonction qui formera les N premiers éléments d'une ligne donnée sous forme de tableau :
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;
    }
}
De même, il faut écrire des fonctions qui continueraient les séquences suivantes :

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…

Rechercher des éléments

Dans cette série de tâches, il est nécessaire de trouver un élément dans le tableau fini qui possède certaines propriétés. Par exemple, l'élément avec la valeur maximale. Pour le démontrer, écrivons le code d'une fonction qui prend un tableau et détermine l'index de l'élément maximum dans le tableau, puis affiche cet élément avec son index sur la console. Je vais également montrer comment, à l'aide de la classe, java.util.concurrent.ThreadLocalRandomvous pouvez générer rapidement un tableau d'entiers d'une longueur donnée, composé d'éléments aléatoires :
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));
    }
}
Maintenant les tâches elles-mêmes. À partir d’un tableau d’éléments entiers aléatoires, nous devons trouver :
  1. Maximum.
  2. Le minimum.
  3. Moyenne.
  4. Le nombre d'éléments entre les éléments maximum et minimum.
  5. Le premier nombre premier.
  6. Le dernier nombre premier.
  7. Le nombre de nombres premiers dans le tableau.
Vous pouvez afficher à la fois la valeur et les indices. Si aucun élément ne vous intéresse, affichez-le à l'écran comme vous le souhaitez. Pour la dernière tâche, vous devez préparer un tableau d’éléments entiers triés par ordre croissant. Dans ce tableau, vous devez rechercher un élément par valeur en un nombre minimum d'opérations ( Hint ).

Tri

Dans cette série de problèmes, vous devez trier un tableau d’éléments entiers à l’aide de divers algorithmes de tri. Il existe de nombreux documents sur divers algorithmes sur Internet. Essayez d'abord de comprendre l'essence de l'algorithme, puis essayez de le mettre en œuvre vous-même. D'abord sur papier (schéma fonctionnel, pseudocode, tout ce qui vous convient), puis dans IDEA. Algorithmes de mise en œuvre :
  • tri à bulles ;
  • tri par sélection ;
  • tri par insertion;
  • tri par fusion.

Problèmes impliquant des tableaux bidimensionnels

Dessine la matrice

Dans la prochaine série de tâches, il est nécessaire de dessiner (sortie sur la console) des tableaux bidimensionnels (matrices) composés d'une certaine manière : ils doivent correspondre au modèle spécifié par la tâche. Laisse moi te donner un exemple. Nous devons construire et afficher une matrice m*n(où mest le nombre de lignes et nest le nombre d'éléments dans la ligne) du formulaire :

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Écrivons une fonction qui fera tout pour nous, et fournirons également une fonction qui affichera magnifiquement la matrice sur la console (vous la trouverez peut-être utile) :
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();
        }
    }
}
Maintenant tâches : Afficher une matrice m*ndu formulaire : 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

Rechercher des éléments

Dans cette section, il est nécessaire de mettre en œuvre une recherche de différents éléments dans différentes parties de la matrice : dans une colonne spécifique ou dans une ligne spécifique. Supposons que nous ayons une matrice de la forme : -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 A titre d'exemple, trouvons le nombre d'éléments négatifs dans la troisième ligne :
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();
        }
    }
}
À la suite de l'exécution de la méthode main, les éléments suivants seront affichés sur la console :

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 
Maintenant les tâches. Pour tout impair, nimprimez une matrice n*ndu formulaire :

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
De cette matrice dériver :
  • tous les éléments négatifs ;
  • tous les éléments négatifs de la chaîne i;
  • tous les éléments négatifs dans la colonne j;
  • tous les éléments diagonaux (en commençant par le coin supérieur gauche) ;
  • tous les éléments diagonaux (en commençant par le coin inférieur gauche).

Bataille navale

Dernière section avec un astérisque : pas de conseils ni d'exemples. Les matrices sont idéales pour programmer le jeu de bataille navale. L'une des étapes de programmation de ce jeu est le placement des navires sur le terrain de jeu. Si vous résolvez un certain nombre de ces problèmes, soyez assuré que vous serez en mesure de faire face au combat naval. Donc, étant donné une matrice 10x10 composée de zéros. Supposons qu'il s'agisse d'un terrain de bataille navale. Dans ce champ, 0 est une cellule vide, 1 est un navire ou une partie de navire. Écrivez des fonctions dont chacune, selon les règles du jeu de bataille navale, les place au hasard :
  • 10 navires à un seul pont ;
  • 10 corbals à deux étages ;
  • 5 navires à trois ponts ;
  • dispose tous les navires pour le jeu de bataille navale (4 à un pont, 3 à deux ponts, 2 à trois ponts, 1 à quatre ponts).
C'est tout! Comme pour tout sujet de programmation, les tableaux s’apprennent mieux par la pratique. Bon échauffement !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION