【问题标题】:Check if sums of i-th row and i-th column are same in 2d array [closed]检查二维数组中第 i 行和第 i 列的总和是否相同[关闭]
【发布时间】:2020-06-16 05:15:28
【问题描述】:

我需要检查二维数组中第 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;
}

【问题讨论】:

  • 请详细说明“它不起作用”。输出是什么?您期望相反的输出是什么?为什么?它会崩溃吗?悬挂?蓝屏幕?无限循环?究竟是什么让您认为某些事情不起作用?你调试了吗? ericlippert.com/2014/03/05/how-to-debug-small-programs
  • 注意sum1 += a[i][j]; sum2 += a[j][i];会打破数组边界,数组不是正方形的。
  • 不清楚你的意思是什么“我怎样才能像[1][1],[1][2]等一样正常计数。”你问如何从[1]索引数组?

标签: c arrays sum dimensional


【解决方案1】:

您计算的行总和似乎是正确的,但您计算的列总和是错误的。

试试看:

  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);
    }
  }

另外我怎样才能像 [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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多