检查二维数组中第 i 行和第 i 列的总和是否相同
Check if sums of i-th row and i-th column are same in 2d array
我需要检查二维数组中第 i 行和第 j 列的总和是否相同,并输出行的 i 和列的 j 以及总和。另外我怎样才能像 [1][1],[1][2]
等一样正常计数
提前致谢。
这就是我所拥有的,遗憾的是它不起作用
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int sum1 = 0, sum2 = 0;
int a[2][3];
int i, j;
for (i = 0; i<2; i++)
{
for (j = 0; j<3; j++)
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
for (i = 0; i<2; i++)
{
sum1 = 0, sum2 = 0;
for (j = 0; j<3; j++)
{
sum1 += a[i][j];
sum2 += a[j][i];
}
if (sum1 == sum2)
printf("row is %d and column is %d = %d", i, j, sum1);
}
return 0;
}
你计算的行总和似乎是正确的,但你计算的列总和是错误的。
试一试:
for (i = 0; i<2; i++) // For every row
{
// Calculate row sum
sumRow = 0;
for (j = 0; j<3; j++)
{
sumRow += a[i][j];
}
for (j = 0; j<3; j++) // For every column
{
// Calculate column sum
sumColumn = 0;
for (i = 0; i<2; i++)
{
sumColumn += a[i][j];
}
// Compare results
if (sumRow == sumColumn)
printf("row is %d and column is %d = %d", i, j, sumRow);
}
}
但是上面的代码效率不高。更好的方法是预先计算列总和,这样您就不需要一次又一次地计算。
类似于:
int columnSum[3] = {0};
for (j = 0; j<3; j++) // For every column
{
// Calculate column sum
for (i = 0; i<2; i++)
{
columnSum[j] += a[i][j];
}
}
for (i = 0; i<2; i++) // For every row
{
// Calculate row sum
sumRow = 0;
for (j = 0; j<3; j++)
{
sumRow += a[i][j];
}
for (j = 0; j<3; j++) // For every column
{
// Compare results
if (sumRow == columnSum[j])
printf("row is %d and column is %d = %d", i, j, sumRow);
}
}
Also how can I make count it normally like [1][1],[1][2]
如果你想用 C 语言编程,你必须像语言一样自然地计算 - 例如从零开始。并进一步排在主要位置。所以使用
Column 0 Column 1 Column 2
Row 0: [0][0] [0][1] [0][2]
Row 1: [1][0] [1][1] [1][2]
我需要检查二维数组中第 i 行和第 j 列的总和是否相同,并输出行的 i 和列的 j 以及总和。另外我怎样才能像 [1][1],[1][2]
等一样正常计数
提前致谢。
这就是我所拥有的,遗憾的是它不起作用
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int sum1 = 0, sum2 = 0;
int a[2][3];
int i, j;
for (i = 0; i<2; i++)
{
for (j = 0; j<3; j++)
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
for (i = 0; i<2; i++)
{
sum1 = 0, sum2 = 0;
for (j = 0; j<3; j++)
{
sum1 += a[i][j];
sum2 += a[j][i];
}
if (sum1 == sum2)
printf("row is %d and column is %d = %d", i, j, sum1);
}
return 0;
}
你计算的行总和似乎是正确的,但你计算的列总和是错误的。
试一试:
for (i = 0; i<2; i++) // For every row
{
// Calculate row sum
sumRow = 0;
for (j = 0; j<3; j++)
{
sumRow += a[i][j];
}
for (j = 0; j<3; j++) // For every column
{
// Calculate column sum
sumColumn = 0;
for (i = 0; i<2; i++)
{
sumColumn += a[i][j];
}
// Compare results
if (sumRow == sumColumn)
printf("row is %d and column is %d = %d", i, j, sumRow);
}
}
但是上面的代码效率不高。更好的方法是预先计算列总和,这样您就不需要一次又一次地计算。
类似于:
int columnSum[3] = {0};
for (j = 0; j<3; j++) // For every column
{
// Calculate column sum
for (i = 0; i<2; i++)
{
columnSum[j] += a[i][j];
}
}
for (i = 0; i<2; i++) // For every row
{
// Calculate row sum
sumRow = 0;
for (j = 0; j<3; j++)
{
sumRow += a[i][j];
}
for (j = 0; j<3; j++) // For every column
{
// Compare results
if (sumRow == columnSum[j])
printf("row is %d and column is %d = %d", i, j, sumRow);
}
}
Also how can I make count it normally like [1][1],[1][2]
如果你想用 C 语言编程,你必须像语言一样自然地计算 - 例如从零开始。并进一步排在主要位置。所以使用
Column 0 Column 1 Column 2
Row 0: [0][0] [0][1] [0][2]
Row 1: [1][0] [1][1] [1][2]