を行きます。それは始まりを見にくいかもしれません。最終結果は、結果を導くルートではなく、あなたが考えているからです。
これを変更するには、古い規則のコーディング(divide and conquer)を使用できます。このapprachは、我々が実行することができる簡単なタスクに主要な問題を減らすことができる複雑な問題の類似点を見つけるために私たちに教えてくれます。言い換えれば、私たちは小さな問題で大きな問題をチャンクしています。それは本当に簡単に解決でき、最終的には小さな結果を大きなものと闘います。
あなたの問題で始まることをお勧めします。
Q1:数字のピタマインダーを印刷するには?
私たちはそれを知らないので、何かに集中することができます。私たちは今、
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
0 _ _ _ _ _ _ _ _ 9 _ _ _ _ _ _ _ _
1 _ _ _ _ _ _ _ 8 9 8 _ _ _ _ _ _ _
2 _ _ _ _ _ _ 7 8 9 8 7 _ _ _ _ _ _
3 _ _ _ _ _ 6 7 8 9 8 7 6 _ _ _ _ _
4 _ _ _ _ 5 6 7 8 9 8 7 6 5 _ _ _ _
5 _ _ _ 4 5 6 7 8 9 8 7 6 5 4 _ _ _
6 _ _ 3 4 5 6 7 8 9 8 7 6 5 4 3 _ _
7 _ 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 _
8 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
一部bacgroundの詳細を追加することができ、私たちの観察を改善するために
は観測のための時間です。
このような見解から、私たちは以下のアイデアを考え出すことができます。
アイデア:ピラミッドは2つの三角形の構成です。
結論:ピラミッドの半分を書く方が簡単です。だから、酸っぱい問題を言い返すことができます。
Q2:三角形のようなシーケンス番号を書き込むにはどうすればよいですか?
これは本当に単純です。最初のループには2つのループが必要で、行の別の列を担当します。
for(int column = 1; column <= 9; column++) {
for(int row = 1; row <= 9; row++) {
if(column ## row) { // Observe what will happen if we use == or <= or > or <>
System.out.print(row);
} else {
System.out.print(" ");
}
}
System.out.println(' ');
}
あなたが最初のタスクを完了すると、あなたはscreean上の数字のsquers、triagles、ラインを印刷することができます。
だから我々はこのような三角形を印刷する方法を知っているとき:
r
c 1 2 3 4 5 6 7 8 9
1 _ _ _ _ _ _ _ _ 9
2 _ _ _ _ _ _ _ 8 9
3 _ _ _ _ _ _ 7 8 9
4 _ _ _ _ _ 6 7 8 9
5 _ _ _ _ 5 6 7 8 9
6 _ _ _ 4 5 6 7 8 9
7 _ _ 3 4 5 6 7 8 9
8 _ 2 3 4 5 6 7 8 9
9 1 2 3 4 5 6 7 8 9
我々は、より適切であろうあなたのコードを変更する必要があり、コンピュータの世界では一般的に操作がゼロでないものから始めます。
r
c 0 1 2 3 4 5 6 7 8
0 _ _ _ _ _ _ _ _ 9
1 _ _ _ _ _ _ _ 8 9
2 _ _ _ _ _ _ 7 8 9
3 _ _ _ _ _ 6 7 8 9
4 _ _ _ _ 5 6 7 8 9
5 _ _ _ 4 5 6 7 8 9
6 _ _ 3 4 5 6 7 8 9
7 _ 2 3 4 5 6 7 8 9
8 1 2 3 4 5 6 7 8 9
これで成功したら、すぐにやります。
なぜ、各行に対してすべての操作を繰り返す必要がありますか?私たちが何らかの価値を置くことができれば、思考や計算をする必要がなくなるだけで、結果全体を画面に書くことに集中することができます。
この問題の解決策は、dynamic programingとして知られているapporachの配列と概念です。このアプローチでは、我々は未来の操作のために使用される何らかの物を暗記しようとします。
ワームのように、番号を割り当てて印刷する代わりに配列に割り当てるだけです。で
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [7] [8] [9]
[ ] [ ] [ ] [ ] [ ] [6] [7] [8] [9]
[ ] [ ] [ ] [ ] [5] [6] [7] [8] [9]
[ ] [ ] [ ] [4] [5] [6] [7] [8] [9]
[ ] [ ] [3] [4] [5] [6] [7] [8] [9]
[ ] [2] [3] [4] [5] [6] [7] [8] [9]
[1] [2] [3] [4] [5] [6] [7] [8] [9]
、あなたはこの
int[] array = new int[9];
for(int column = array.length; column > 0 ; column--) {
for(int row = 0; row <= array.length; row++) {
if(column == row) {
array[row-1] = column;
}
}
System.out.println(Arrays.toString(array));
}
のようなコードを思い付いたはずですので、そのコードから明らかであるものを、私たちだけで一つの値を設定し、各段階での使用のためにということです。それは以下に表示されます
9 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9] -Step one we put nine
8 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [ ] -Step two we put eight
7 [ ] [ ] [ ] [ ] [ ] [ ] [7] [ ] [ ]
6 [ ] [ ] [ ] [ ] [ ] [6] [ ] [ ] [ ]
5 [ ] [ ] [ ] [ ] [5] [ ] [ ] [ ] [ ]
4 [ ] [ ] [ ] [4] [ ] [ ] [ ] [ ] [ ]
3 [ ] [ ] [3] [ ] [ ] [ ] [ ] [ ] [ ]
2 [ ] [2] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
1 [1] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
9つのステップの後、私たちは数字で全体の配列を記入します。
我々がまだ欠けているものは画面上の結果です。そのためには、各ステップで配列全体を出力する必要があります。最初に、左から右へ、それから最初から最後まで印刷してください。
と魔法を行うコードは、他の2つのネストされたループ内でここでは、この
public static void pyramide(int levels) {
int[] tab = new int[levels];
for(int row = tab.length; row > 0; row--) {
tab[row-1] = row;
//Print left
for(int i=0; i < tab.length; i++) {
if(tab[i] != 0) {
System.out.print(tab[i]);
} else {
System.out.print(' ');
}
}
//Print right
for(int i= tab.length-2; i >= row - 1; i--) {
if(tab[i] != 0) {
System.out.print(tab[i]);
}
}
System.out.println("");
}
}
三元演算子の仕組みをご存じですか?もしそうでなければ、それを見てください。 if/elseを使用してコードを書き換えて、理解しやすくしてください。あなたの解釈を入れて、あなたのためにそれを確認することができます。 – thatidiotguy
他の2つのループは番号の印刷を処理します。 1つは昇順(1,2,3、...)部分、もう1つは降順部分(9,8、...)です。 –
これについて考えてみると、ここで解決するには2つの問題があります.1つは数字を印刷し、もう1つはパディング(スペース)を印刷することです。問題の分解を使用し、それぞれの問題を個別に解決することで、より良い理解に役立ちます。両方の問題を解決したら、ここで提示した問題を解決するソリューションを統合する必要があります。 – hfontanez