これは実際にインタビューの質問でした。Javaを使用して以下を印刷する必要がありました。
9
9 8 9
9 8 7 8 9
9 8 7 6 7 8 9
. . .
. . .
インタビュー中に恥ずかしいコードを書きましたが、それでもうまくいきました - 外側のループ、2 つの内側のループ (1 つは減分シーケンス用、もう 1 つは増分シーケンス用です!) と大量の変数を使用します。変数の 1 つは、各行の長さでした。
インタビュアーは私にそれを使って書き直すように頼んだ
1 つの外側ループと 1 つの内側ループのみ
行長変数なし。
注: 回答を見た後、インタビュアーは 2 番目の条件を本当に意味していなかったと思います。彼は私のコードを単純化することを望んでいたのかもしれません。
それで、後で家に帰って、私はこれにたどり着きました:
int rowCnt = 5;
for(int i = 1; i <= rowCnt; i++)
{
int val = 9;
int delta = -1;
int rowLen = i * 2 - 1;
for(int j = 1; j <= rowLen; j++)
{
System.out.print(val + " ");
val += delta;
if(j >= rowLen / 2) delta = 1;
}
System.out.println();
}
ここでは、内側のループを 1 つだけ使用しています。値を使用して、delta
増分または減分が発生するかどうかを判断しています。行ごとに、現在のインデックスを行の中間点と比較し、デルタを変更します。
最初の条件 - 内側のループが 1 つだけ - を満たしました。しかし、行の長さを使わないとできません。
行の長さを知らずにこれを印刷するにはどうすればよいでしょうか?
多くの回答が受け入れられましたが、私は 1 つを選択する必要があり、最も理解しやすいものを選びました。