古典的な循環構造の例題の新しいアルゴリズム

1671 ワード

次のパターンを出力します.
1       3       6       10    15   
2       5       9       14   
4       8       13   
7       12   
11
 
これは古典的な循環に関する問題で、筆者はJAVAを勉強している間に出会ったこの問題で、もちろん、実はこれは循環構造に関する問題にすぎない.言語に関係ない.元のアルゴリズムは、配列内のすべての要素を1つの配列で読み込みます.
 { 1, 3, 6, 10, 15, 2, 5, 9, 14, 4, 8, 13, 7, 12, 11 }

次いで,2層サイクルを用いて実現した.
筆者はJavaを初めて学び,より簡潔な額配列{1,2,3,4,5}を用いて実現する新しいアルゴリズムを試みた.
ここで説明するのは,ここで筆者のアルゴリズムの時間複雑度が最適ではなく,従来のアルゴリズムより劣ることである.ここでは単純にコミュニケーション・開拓構想の観点からこのアルゴリズムを共有する.
まず行列要素間の関係を観察し、論理法則を抽象化する.
1行目:(1)+2+3+4+5
2行目:(1+1)+3+4+5
3行目:(1+1+2)+4+5
4行目:(1+1+2+3)+5
5行目:(1+1+2+3+4)
 
次に、forループを使用するコードを構築します.
行列間の2次元構造のループは、まず2層forループ、外層ループ出力5行、内層ループ出力各行の具体的な要素を使用します.アーキテクチャ内でループすると、各行に最初の要素を印刷してから、他の要素をループ出力し続ける必要があります.印刷の最初の要素にはforループが必要です.残りの要素を印刷するにはforループが必要です.したがって,内ループは2つの順序構造関係のforループに分けて実現すべきである.コードアーキテクチャは次のとおりです.
for(行間循環)
for(行ごとの先頭要素を循環算出)
印刷プリファレンス
for(各行の残りの要素をループ計算)
残りの要素を印刷
折り返し
 
最後のコード実装:
筆者がJAVAを勉強していたときに遭遇した問題なので、ここではjavaで実現します.
int i=0,j=1,k=0,sum=1,s[]= {1,2,3,4,5};
for(i=0;i<5;i++) {
         for(k=0,sum=1;k
                           sum+=s[k];
                                            }
                          System.out.printf("%d\t",sum);
         for(j=1;j<=4-i;j++){ 
sum+=s[j]+i;//ループが始まるたびにjが初期化され、s[1]から演算が開始され、+iが差分値を補う.
                          System.out.printf("%d\t",sum);
                                            }
                          System.out.printf("");
                          }