我正在尝试执行一个程序,它会将每个数组列的第一个和最大数字之间的所有元素都更改为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;
}
答案 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;
}
}
您要从每一行中找到最大值,您需要从每一列中找到。