Как я вижу, вы проверяете, отличаются ли два числа одного и того же значения только одним столбцом или одной строкой:
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("No\n");
} else{
printf("Yes\n");
}
printf("Count : %d\n",count );
getchar();
return 0;
}
Могу ли я предложить, прежде чем копировать код, вы должны понять алгоритм, лежащий в его основе. Это простое и грубое мышление.