计算不适用于多维数组

时间:2016-11-25 14:42:19

标签: c++ arrays multidimensional-array

我正在尝试执行一个程序,它会将每个数组列的第一个和最大数字之间的所有元素都更改为0。 程序有效,但结果不对。

这是输入文件:

3 5
2 3 5
1 2 4
4 1 3
6 1 2
5 8 1

这是结果文件:

2 0 0 6 5 
3 0 0 0 8 
5 4 3 2 1

但我期待这样的结果:

 2 3 5
 0 0 4
 0 0 3
 6 0 2
 5 8 1

我不确定我的代码是否错误地读取/打印信息,或者我不理解多维数组(我是编码初学者)。任何帮助将不胜感激,谢谢。

#include <iostream>
#include <fstream>

using namespace std;

int main() {
  int n, m, Z[100][100];

  ifstream fr("input.txt");
  ofstream fd("output.txt");

  fr >> n >> m;

  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      fr >> Z[i][j];

  for (int i = 0; i < n; i++) {
    int max = Z[0][0];
    int NR = 0;

    for (int j = 0; j < m; j++) {
      if (Z[i][j] > max) {
        max = Z[i][j];
        NR = j;
      }
    }

    for (int j = 1; j < NR; j++) {
      Z[i][j] = 0;
    }
  }

  for (int i = 0; i < n; i++) {
    fd << endl;
    for (int j = 0; j < m; j++)
      fd << Z[i][j] << " ";
  }

  return 0;
}

1 个答案:

答案 0 :(得分:0)

只需交换m和n,请参阅下面的

fr >> m >> n;

编辑:

这是你的代码

for (int i = 0; i < n; i++) {
int max = Z[0][0];
int NR = 0;

for (int j = 0; j < m; j++) {
  if (Z[i][j] > max) {
    max = Z[i][j];
    NR = j;
  }
}

for (int j = 1; j < NR; j++) {
  Z[i][j] = 0;
}
}

相反它应该是:

for(int j = 0; j < m ; j++)
{
int max = Z[0][0];
int NR = 0;

    for(int i = 0 ; i < n ; i++)
    {
        if(Z[i][j] > max)
        {
        max = Z[i][j];
        NR = i;
        }
    }

        for(int i = 1 ; i < NR ; i++)
        {
            Z[i][j] = 0;
        }
}

您要从每一行中找到最大值,您需要从每一列中找到。