如何检查矩阵的反对角线上的项是否相同?
How to check if the terms on the anti diagonal of a matrix are the same?
这是我目前的代码。我相信它与 checkdiag2 函数本身有关,因为我逐步观察了程序 运行 并且它从未超过最后一个 'if' 语句。我不确定为什么。这是无效条件吗?我之前用 i 试过,它被分配了反对角线的第一个值。
#include <stdio.h>
#include <stdlib.h>
int checkdiag2 (int **m, int size);
int
main(void)
{
int i, j, dim, result;
int **arr;
FILE *in;
in = fopen("matrix3.txt", "r");
fscanf(in, "%d", &dim);
arr = (int**) calloc(dim, sizeof(int*));
for (i=0; i<dim; ++i)
arr[i] = (int*) calloc(dim, sizeof(int));
for (i=0; i<dim; ++i)
for (j=0; j<dim; ++j)
fscanf(in, "%d", &arr[i][j]);
result = checkdiag2(arr, dim);
if (result == 1)
printf("The matrix is %dx%d and all the numbers on the antidiagonal are the same", dim, dim);
else
printf("The matrix is %dx%d and all the numbers on the antidiagonal are NOT the same", dim, dim);
for (i=0; i<dim; ++i)
free(arr[i]);
free(arr);
return(0);
}
int checkdiag2 (int **m, int size)
{
int i, j, count=0;
i = m[0][size];
for (i=0; i<size; ++i)
for (j=0; j<size; ++j)
if ((i+j)==size)
if(m[i][j]==m[0][size])
count=count+1;
if (count==size)
return(1);
else
return(0);
}
我正在使用的文件中的数据是
8
8 9 4 5 6 7 8 5
8 8 4 5 6 7 5 5
8 9 8 5 6 5 5 5
8 9 4 8 5 5 8 5
8 9 4 5 8 7 8 5
8 9 5 5 6 8 8 4
8 5 4 5 6 7 8 4
5 9 4 5 6 7 8 8
结果打印反对角线不一样
C 中的数组索引是从 0 开始的;因此,如果您的矩阵是 NxN,则反对角线上任何元素的索引总和为 N-1,而不是 N。
这是我目前的代码。我相信它与 checkdiag2 函数本身有关,因为我逐步观察了程序 运行 并且它从未超过最后一个 'if' 语句。我不确定为什么。这是无效条件吗?我之前用 i 试过,它被分配了反对角线的第一个值。
#include <stdio.h>
#include <stdlib.h>
int checkdiag2 (int **m, int size);
int
main(void)
{
int i, j, dim, result;
int **arr;
FILE *in;
in = fopen("matrix3.txt", "r");
fscanf(in, "%d", &dim);
arr = (int**) calloc(dim, sizeof(int*));
for (i=0; i<dim; ++i)
arr[i] = (int*) calloc(dim, sizeof(int));
for (i=0; i<dim; ++i)
for (j=0; j<dim; ++j)
fscanf(in, "%d", &arr[i][j]);
result = checkdiag2(arr, dim);
if (result == 1)
printf("The matrix is %dx%d and all the numbers on the antidiagonal are the same", dim, dim);
else
printf("The matrix is %dx%d and all the numbers on the antidiagonal are NOT the same", dim, dim);
for (i=0; i<dim; ++i)
free(arr[i]);
free(arr);
return(0);
}
int checkdiag2 (int **m, int size)
{
int i, j, count=0;
i = m[0][size];
for (i=0; i<size; ++i)
for (j=0; j<size; ++j)
if ((i+j)==size)
if(m[i][j]==m[0][size])
count=count+1;
if (count==size)
return(1);
else
return(0);
}
我正在使用的文件中的数据是
8
8 9 4 5 6 7 8 5
8 8 4 5 6 7 5 5
8 9 8 5 6 5 5 5
8 9 4 8 5 5 8 5
8 9 4 5 8 7 8 5
8 9 5 5 6 8 8 4
8 5 4 5 6 7 8 4
5 9 4 5 6 7 8 8
结果打印反对角线不一样
C 中的数组索引是从 0 开始的;因此,如果您的矩阵是 NxN,则反对角线上任何元素的索引总和为 N-1,而不是 N。