2016-11-25 56 views
0

工作,我试图做一个程序,它会改变每个阵列列第一和最大的数字之间的所有元素为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

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

您是从每一行寻找最大,需要从每一列找到。

+0

这仅固定在印刷问题,但现在的代码不改变第一和最大阵列的collums之间的号码为0。·试图交换n,其中米,但它不会改变的结果。任何原因为什么这不起作用? – Duona

+0

@Duona尝试用'NR = i'交换'NR = j',并用下面的for循环进行同样的操作。 – Stargateur