计算在多维阵列中不起作用

Calculations not working in Multidimensional array

本文关键字:不起作用 阵列 计算      更新时间:2023-10-16

我正在尝试执行一个程序,该程序将将每个数组列的第一个和最大数字之间的所有元素更改为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;
}

只是交换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;
        }
}

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