如何检查矩阵在C中的行或列中是否具有相同的值

  • 本文关键字:是否 何检查 c matrix
  • 更新时间 :
  • 英文 :


我有一个家庭作业问题。它要求我们根据用户的输入制作一个矩阵。例如:如果用户输入4,则矩阵将为4 X 4。之后,程序将检查矩阵在行或列中是否具有相同的值。并且它将给出是或否输出。

例如:

输入:

21 22 1

输出:

(因为该矩阵在行或列中没有相同的值。(

输入2:

34 5 67 8 97 3 3

输出:

No

(因为该矩阵在行或列中具有相同的值(3&3和7&7(

输入3:

21 23 2

输出:

(因为该矩阵在第1列上具有相同的值。(

输入4

21 13 4

输出:

No

(因为该矩阵在第一行(1 1(中具有相同的值

我试过这样做,但有些"案例"仍然不起作用。例如,我试图在代码中包含一个计数,但有些计数不正确。

示例:输入:

43 4 5 62 3 4 56 5 6 35 4 6 3

输出:

否count:2

(它应该是3,因为它有相同的值,即6(在第3行(,6在第3列,3在第4列。(

#include "stdio.h"
int main()
{
int matrix[500][500];
int testcase;
int count = 0;
scanf("%d",&testcase); getchar();
for(unsigned i = 0; i < testcase; i++) {
for(unsigned j = 0; j < testcase; j++) {
scanf("%d",&matrix[i][j]); getchar();
}
}
// printf("[0,0] = %c",matrix[0][0]);
// printf("n[0,1] = %c",matrix[0][1]);
// printf("n[1,0] = %c",matrix[1][0]);
// printf("n[1,1] = %c",matrix[1][1]);
for(unsigned i = 0; i < testcase; i++) {
for(unsigned j = 0; j < testcase; j++) {
if(matrix[i][j] == matrix[i][j+1]) {
count = count + 1;
}
else if(matrix[i][j] == matrix[i+1][j]) {
count = count + 1;
}
}
}
if(count > 0) {
printf("Non");
} else{
printf("Yesn");
}
printf("Count : %dn",count );
getchar();
return 0;
}

正如我所看到的,您在这里检查两个相同值的数字是否只相差一列或一行:

if(matrix[i][j] == matrix[i][j+1]) {
count = count + 1;
}
else if(matrix[i][j] == matrix[i+1][j]) {
count = count + 1;
}

我认为你可能需要一个临时变量,这样你就可以分别扫描每一行和每一列,例如:

temp = matrix[i][j];
if(checkRow(temp, i, j, matrix, testcase) == true) count++;
if(checkColumn(temp, i, j, matrix, testcase) == true) count++;

checkRow应该是这样的:

bool checkRow(int temp, int row, int col, int matrix[][500], int size)
{
for(int i=col; i < size;)
{
if(temp == matrix[row][i]) return true;
}
return false;
}

分别构建checkColumn函数。

编辑:既然你告诉我你还没有学会如何使用函数,这将是你的最后一个程序。它是有效的,我可能建议最终的测试用例应该输出"count=4",因为您可能会错过一个用例。这是代码:

#include "stdio.h"
int main()
{
int matrix[500][500];
int testcase;
int count = 0;
scanf("%d",&testcase); getchar();
int temp;
for(unsigned i = 0; i < testcase; i++) {
for(unsigned j = 0; j < testcase; j++) {
scanf("%d",&matrix[i][j]); getchar();
}
}
// printf("[0,0] = %c",matrix[0][0]);
// printf("n[0,1] = %c",matrix[0][1]);
// printf("n[1,0] = %c",matrix[1][0]);
// printf("n[1,1] = %c",matrix[1][1]);
for(unsigned i = 0; i < testcase; i++) {
for(unsigned j = 0; j < testcase; j++) {
temp = matrix[i][j];
//Scan current row
for(unsigned k = j+1; k < testcase; k++)
{
if(temp == matrix[i][k])
{
count++;
break;
}
}
//Scan current column
for(unsigned k = i+1; k < testcase; k++)
{
if(temp == matrix[k][j])
{
count ++;
break;
}
}
}
}
if(count > 0) {
printf("Non");
} else{
printf("Yesn");
}
printf("Count : %dn",count );
getchar();
return 0;
}

我建议,在你复制代码之前,你必须了解它背后的算法。这是一种简单而暴力的思维。

最新更新