2016-11-25 11 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

これは印刷の問題のみを修正しましたが、最初の配列のcollumと最大配列のcollumの間の数値は0に変更されません。mとnを入れ替えようとしましたが、結果は変わりません。それがうまくいかない理由は何ですか? – Duona

+0

@Duona 'NR = j'を' NR = i'で置き換えて、foを以下のforループと入れ替えようとします。 – Stargateur

関連する問題