2
votes

Comment puis-je vérifier si le tableau 2d est unique uniquement avec des boucles for

comment pourrais-je vérifier un doublon pour les colonnes et les lignes et retourner vrai ou faux selon s'il y a des doublons. Par exemple

1 2 3

3 1 2

2 3 1

Renvoie true car pas de doublons, mais ..

1 2 2

3 2 3

2 1 1

renverrait false car il y a un doublon dans la colonne 2 {2, 2, 1} .

Comment procéder pour vérifier s'il y a des doublons dans les lignes, puis vérifier s'il y a des doublons dans les colonnes?

Je dois également vérifier chaque nombre pour compere avec les autres nombres sur la même ligne et la même colonne

Jusqu'à présent, je n'ai que ce qui suit:

for (int row = 0; row < arr.GetLength(0); row++)
        {
            for (int col = 0; col < arr.GetLength(1); col++)
            {

                Console.WriteLine("Check for: " + arr[row, col]);
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    if (i == row)
                    {
                        continue;
                    }
                    Console.WriteLine("{0} == {1}", arr[row, col], arr[i, col]);
                    if (i != row && arr[row, col] == arr[i, col])
                    {
                        unique = false;
                    }
                }
                for (int j = 0; j < arr.GetLength(1); j++)
                {
                    if (j == col)
                    {
                        continue;
                    }
                    Console.WriteLine("{0} == {1}", arr[row, col], arr[row, j]);
                    if (j != col && arr[row, col] == arr[row, j])
                    {
                        unique = false;
                    }
                }

            }
        }

Je suis coincé sur cette assigment depuis 2 jours et je ne sais pas comment faire le bon chèque avec les deux dernières boucles for. De plus, je suis censé utiliser uniquement pour les boucles et uniquement les tableaux 2d non dentelés ni HashSets.

Merci d'avance.

Salut les gars donc à vous tous de pouvoir vérifier chaque numéro unique de chaque ligne et colonne simples pour obtenir une matrice unique en 2d lorsque vous n'utilisez que des boucles for vos boucles for pour les lignes et les colonnes doivent commencer à 0 et la boucle dépend pour les lignes, la largeur et les colonnes pour la hauteur, alors le plus important est dans l'instruction if donc quand la boucle commence et vérifie si l'index qui vérifie les colonnes et celui des lignes est le même que le nombre qu'il vérifie, il doit continuer alors vous passez à la deuxième instruction if qui est si l'index car la ligne ou la colonne n'est pas la même que la ligne ou la colonne dont elle est actuellement et le tableau de ligne et col == tableau d'index, col ou tableau de ligne, index alors la matrice n'est pas unique. Je publierai également le code pour que vous puissiez voir le résultat final. Merci à tous ceux qui m'ont guidé dans la bonne direction

 for (int row = 0; row < n; row++)
        {
            for (int col = 0; col < m; col++)
            {

                Console.WriteLine("Check for: " + arr[row, col]);
                for (int i = 1; i < arr.GetLength(1); i++)
                {
                    Console.WriteLine("{0} == {1}", arr[row, col], arr[i, col]);
                    if (col != i)
                    {
                        if (arr[row, col] == arr[i, col])
                        {
                            unique = false;
                        }
                    }

                }
                for (int j = 1; j < arr.GetLength(0); j++)
                {
                    Console.WriteLine("{0} == {1}", arr[row, col], arr[row, j]);
                    if (row != j)
                    {
                        if (arr[row, col] == arr[row, j])
                        {
                            unique = false;
                        }
                    }



                }

c#

6 commentaires

S'il y a 3 colonnes, les nombres de ces trois colonnes sont-ils toujours 1, 2 et 3? Ou pourraient-ils être d'autres nombres (par exemple 1, 2 et 4)? La raison pour laquelle je pose la question est que s’ils ne peuvent que être 1, 2 et 3, le problème est considérablement plus simple.


il peut même être 123 456 789 car il s'agit d'une matrice unique


Donc, à titre d'exemple, si la première ligne du tableau contenait 4 et 89 et 123 ce serait valide?


Il doit être unique, peu importe les nombres que j'ai utilisés 123,231,312 juste à titre d'exemple


Copie possible de Comment vérifier les valeurs en double horizontalement et verticalement dans un tableau 2D?


Pourriez-vous s'il vous plaît ajouter un exemple minimal reproductible : code de travail, y compris le tableau que vous utilisez?


3 Réponses :


1
votes

Je suggère d'utiliser une méthode d'aide qui vérifie une séquence pour les doublons. Vous pouvez utiliser le même algorithme pour les lignes et pour les colonnes.

        public bool SequenceHasDuplicateSymbols(char[] sequence) {

            char symbolToCheckFor;         
            for (int i = 0; i < sequence.Length; i++)
            {
                symbolToCheckFor = sequence[i];

                for (int j = 0; j < sequence.Length; j++)
                {
                    if (i != j)
                    {
                        if (symbolToCheckFor == sequence[j])
                        {
                            return true;
                        }
                    }
                }
            }

            return false;
        }


0 commentaires

0
votes

Donc, vous voulez vérifier vos lignes et colonnes pour les doublons, un peu comme un sudoku.

Je vous suggère de créer une méthode d'aide qui vérifie les doublons dans les tableaux, puis d'exécuter cette méthode une fois avec chaque ligne et colonne.

        var result = true;

        // rows
        for (int i = 0; i < arr2d.Length; i++)
        {
            int[] arrToCheck = new int[arr2d[i].Length];
            for (int j = 0; j < arr2d[i].Length; j++)
            {
                arrToCheck[j] = arr2d[i][j];
            }
            if(!checkForDuplicateInArray(arrToCheck))
            {
                result = false;
            }
        }

        // columns
        for (int i = 0; i < arr2d[0].Length; i++)
        {
            int[] arrToCheck = new int[arr2d.Length];
            for (int j = 0; j < arr2d.Length; j++)
            {
                arrToCheck[j] = arr2d[j][i];
            }
            if (!checkForDuplicateInArray(arrToCheck))
            {
                result = false;
            }
        }

Il vous suffit de diviser votre tableau 2D en lignes et colonnes et d'exécuter la méthode avec.

private bool checkForDuplicateInArray(int[] arr)
    {
        var result = false;
        foreach (int i in arr)
        {
            foreach (int j in arr)
            {
                if (arr[i] == arr[j] && i != j)
                {
                    result = true;
                }
            }
        }

        return result
    }

Modifier: supposé globalement vrai signifie qu'il n'y a pas de doublon


0 commentaires

0
votes
// int[,] arr = new int[,] { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
int[,] arr = new int[,] { { 1, 2, 2 }, { 3, 2, 3 }, { 2, 1, 1 } };

int len = arr.GetLength(0);
bool unique = true;

for (int x = 0; x < len; x++)
{
    for (int r = 0; r < len; r++)
        if (r != x && arr[x, x] == arr[r, x])
        {
            unique = false;
            break;
        }

    for (int c = x + 1; c < len; c++)
        if (c != x && arr[x, x] == arr[x, c])
        {
            unique = false;
            break;
        }
}
Console.WriteLine(unique);

3 commentaires

Donc en fait, j'utilise le formulaire de saisie de la console, donc j'ai essayé votre réponse et cela n'a pas fonctionné.Je publierai mon code entier pour que vous puissiez voir


le problème est que je ne peux pas le poster ici. Puis-je vous envoyer des DM


Pouvons-nous envoyer un identifiant de réseau social ici? Par exemple, l'identifiant WhatsApp ou l'identifiant Telegram ou etc. Peut-être que Github ou Gitlab sont de meilleurs choix.