伙伴们。我正在尝试用整数填充 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);
}
}
}
我希望每次插入相同的数字时都会出现重复的消息,但它没有发生。非常感谢
为了确保矩阵中的所有元素都是唯一的,您应该修改重复检查逻辑以迭代矩阵中所有先前输入的元素。以下是调整功能的方法:
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;
}
这种方法确保输入到矩阵中的每个元素都是唯一的,并且提供清晰的提示和消息来引导用户完成输入过程