2017-10-17 7 views
0

ある周囲と数字のボックスを印刷する私はループがm & nの値に応じて、以下のようなボックスを返すためのシリーズを必要とします。は同じ値

べき出力:以下

1 1 1 1 1 1 1  
1 2 2 2 2 2 1  
1 2 3 3 3 2 1 
1 2 2 2 2 2 1 
1 1 1 1 1 1 1 

私のコードは、半分にボックスを分割する一連のループを使用して、列と行の両方の値を上昇または下降いずれもこれまでのところです。私が立ち往生しているところでは、これらの境界線を値のために作る方法を見つけようとしています。 if文を使用せずに動作するはずであることに注意してください。上記のコードのための

int m = 5; //column value 
int n = 7; //row value 
int column; 

for (int row = 0; row <= (m/2); row++) { 
    //Ascending 
    for (column = 1; column < (n/2); column++) { 
     int outputNumber = row + 1; 
     System.out.print(outputNumber + " "); 
    } 

    //Fixed 
    do { 
     int outputNumber = row + 1; 
     System.out.print(outputNumber + " "); 
    } 
    while (column < 0); 

    //Descending 
    for (column = n/2; column >= 0; column--) { 
     int outputNumber = row + 1; 
     System.out.print(outputNumber + " "); 
    } 
    System.out.println(); 
} 

for (int row = m/2; row > 0; row--) { 
    for (column = 1; column <= n; column++) { 
     System.out.print(row + " "); 
    } 
    System.out.println(); 
} 

電流出力:

1 1 1 1 1 1 1  
2 2 2 2 2 2 2  
3 3 3 3 3 3 3  
2 2 2 2 2 2 2  
1 1 1 1 1 1 1 
+0

したがって、印刷される数字は、マトリックスを終了するために必要な「ステップ」の最小数を表す必要がありますか? –

+0

行列が実際に配列(たとえば、5 x 1または1 x 5)の場合、出力はどうなるでしょうか? – jhenderson2099

+0

do whileループは何ですか? columnは常に> = 1なので、一度だけ実行されるようです – phflack

答えて

0

は、ここに私の結果です。私はそれがあなたの問題を解決するが、それは少し複雑で迅速に書かれていることを知っている。私の理解は、周囲のタイルは1である必要があり、その後、各タイルは、それが外部からそこに着くためにかかるだろう「ステップ」の最小数を表示しなければならないことが正しいと仮定すると

int m = 5; //column value 
int n = 7; //row value 

for (int i = 0; i < m/2 + 1; i++) { 
    for (int j = 0; j < i + 1; j++) { 
     System.out.print(j + 1 + " "); 
    } 
    for (int j = 0; j < n - ((i + 1) * 2); j++) { 
     System.out.print(i + 1 + " "); 
    } 
    for (int j = 0; j < i + 1; j++) { 
     System.out.print(i + 1 - j + " "); 
    } 

    System.out.println(""); 
} 

for (int i = m/2 + 1; i < m; i++) { 
    for (int j = 0; j < m - i; j++) { 
     System.out.print(j + 1 + " "); 
    } 
    for(int j = 0; j < n - (m - i) * 2; j++) { 
     System.out.print(m-i + " "); 
    } 
    for(int j = 0; j < m - i; j++) { 
     System.out.print(m - i - j + " "); 
    } 

    System.out.println(""); 
} 
0

:私はまた、他の番号でそれをテストしましたマトリックス。

私は個人的にはあなたの解決策を描写するのに苦労します。私の提案があなたの理解に絡み合うかどうかはわかりません。

まず、このマトリックスの構成とこのマトリックスの印刷を分けることができます。私はこれが物事をきれいに保つと思うが、それは私のスタイルだ。

マトリックスにc列とr行があるとします。そこで、forループを入れ子にしてすべてのセルを繰り返し処理します。

for (int r = 0; r < rows; r++) { 
    for (int c = 0; c < columns; c++) { 
     int distanceToEdgeOfRow = Math.abs(rows - (r - rows)); //this finds the number of steps to the nearest row end 
     int distanceToEdgeOfColumn = Math.abs(columns - (c - columns)); //this find the number of steps to the nearest column end 

     int shortestPath = Math.min(distanceToEdgeOfColumn, distanceToEdgeOfRow); //is it shorter to take the closest row exit or column exit? 

     //the shortestPath is still off by one, so we need to add 1 to shortestPath to see what should be printed on this tile 
     matrix[r][c] = shortestPath + 1; 
    } 
}