2016-12-27 9 views
0

次のプログラムがあります。入力3 5配列を対角線で塗りつぶす

3 rows 
5 growth of numbers 

と出力は次のようになります。

1 2 4 7 10 
3 5 8 11 13 
6 9 12 14 15 

しかし、私のプログラムができます:ここで

1 2 3 4 5 
    6 7 8 9 10 
    11 12 13 14 15 

は、私がこれまで

int main() { 
    int n, m, c = 0; 
    cin >> n >> m; 
    int a[n][m]; 

    for (int i = 0; i < n; i++) 
     for (int j = 0; j < m; j++) 
      a[i][j] = ++c; 

    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < m; j++) 
      cout << setw(4) << a[i][j]; 
     cout << endl; 
    } 
} 

を試してきたものです私が間違っていたり、行方不明になっていること

スペースについて:スクリーンショットに表示されるこのような動作の理由が見つかりません(最初のスペースは無視されます)。異なるコンパイラを使用して異なるIDEで実行しようとしましたが、テストシステムでのみこのような問題がありました。

+4

は、スタックオーバーフローへようこそ。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

私はプログラミングに関するものではなく、テストシステム – RiaD

+0

のサイトを使っているので、この質問をトピックとして閉じようとしています。ブラウザの結果を印刷するときだけ失敗します。タグはスキップされます)。ちょうど他のすべてを修正し、それは動作します。注:異なる番号が印刷されています – RiaD

答えて

0

こんにちは、代わりにタブを使用してください。

#include <iostream> 
using namespace std; 

int main() { 
    int n, m, c = 0; 

    cin >> n >> m; 

    int *a = new int[n * m]; 

    for (int i = 0; i < n; i++) 
     for (int j = 0; j < m; j++) 
      a[i * n + j] = ++c; 

    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < m; j++) 
      cout << "\t" << a[i * n + j]; 
     cout << endl; 
    } 
    delete[] a; 
    return 0; 

}

0

私は中等学校でこの問題を解決する方法を覚えていますが、N M未満で、次のコードが動作することができません:

#include <iostream> 

using namespace std; 

void nextij(long n,long m,long& i,long& j) { 
    if (i==n-1) { //bottom row 
     if (j<n-1) { //in the left square 
      j = i+j+1; 
      i = 0; 
     } 
     else { //out of the left square 
      i = j-(n-1)+1; 
      j = m-1; 
     } 
    } 
    else { //other rows 
     if (j==0) { //left most column 
      j = i+1; 
      i = 0; 
     } 
     else { //other columns 
      i++; 
      j--; 
     } 
    } 
} 

int main() { 
    long n = 3; 
    long m = 5; 
    long a[3][5]; 

    long i = 0; 
    long j = 0; 
    long c = 1; 

    while (c<=n*m) { 
     a[i][j] = c;   
     nextij(n,m,i,j); 
     c++;   
    } 

    for (i=0; i<n; i++) { 
     for (j=0; j<m; j++) 
      cout <<a[i][j] <<" "; 
     cout <<endl; 
    } 
} 

/* 
output: 
1 2 4 7 10 
3 5 8 11 13 
6 9 12 14 15 
*/ 
関連する問題