如何在矩阵中插入不同的元素?

问题描述 投票:0回答:1

伙伴们。我正在尝试用整数填充 C 中的二维数组,确保所有元素都是唯一的。我当前的实现会检查先前输入的值中的重复项,但我遇到了一个问题,即同一行或同一列中的重复值并不总是正确检测到。

这是我当前的代码

void duplicateMatrix(int **A, int n,int m)
{ 
    printf("popolate matrix:\n");

    for (int i = 0; i < n; i++) { 
        for (int j = 0; j < m; j++)  {
            int duplicate;
            do {
                duplicate = 0; 
                scanf("%d", &A[i][j]); 
                for (int k = 0; k < i; k++) { 
                    for (int l = 0; l < m; l++){ 
                        if ((k != i || l != j) && A[k][l] == A[i][j]) {
                            duplicate = 1;
                            printf("Duplicate,insert another number!.\n");
                            break;
                        }
                    }
                    if (duplicate == 1) { 
                        break;
                    } 
               }
           } while (duplicate); 
       }
   }
}

我希望每次插入相同的数字时都会出现重复的消息,但它没有发生。非常感谢

c matrix
1个回答
0
投票

为了确保矩阵中的所有元素都是唯一的,您应该修改重复检查逻辑以迭代矩阵中所有先前输入的元素。以下是调整功能的方法:

void duplicateMatrix(int **A, int n, int m) {
printf("Populate matrix with unique integers:\n");

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        int duplicate;
        do {
            duplicate = 0;
            printf("Enter value for A[%d][%d]: ", i, j);
            scanf("%d", &A[i][j]);

            // Check for duplicates in the entire matrix up to A[i][j]
            for (int k = 0; k < n; k++) {
                for (int l = 0; l < m; l++) {
                    if (k == i && l == j) {
                        // Skip the current element
                        continue;
                    }
                    if (A[k][l] == A[i][j]) {
                        duplicate = 1;
                        printf("Duplicate detected. Please enter a different number.\n");
                        break;
                    }
                }
                if (duplicate) {
                    break;
                }
            }
        } while (duplicate);
    }
}

在调用此函数之前,请确保二维数组 A 已正确分配。在 C 中,二维数组可以动态分配为指针数组,其中每个指针代表一行。 用途:

int main() {
int n = 3; // Number of rows
int m = 3; // Number of columns

// Allocate the matrix
int** A = allocateMatrix(n, m);

// Populate the matrix with unique values
duplicateMatrix(A, n, m);

// Deallocate the matrix
deallocateMatrix(A, n);

return 0;
}

这种方法确保输入到矩阵中的每个元素都是唯一的,并且提供清晰的提示和消息来引导用户完成输入过程

© www.soinside.com 2019 - 2024. All rights reserved.