タイトル説明
暁明は、彼が計算するのに必要と9〜16は、彼はすぐに正しい答えは100で書いた、数学の宿題をやっていた、数学、1日の非常に好きです。彼はこれに満足していなかった。しかし、彼は(少なくとも二つの数字を含む)100がどのように多くの連続した正数列の種類疑問に思いました。18,19,20,21,22:長い前に、彼は連続した正の数と100のシーケンスの別のセットを得ました。今、あなたの質問は、あなたもすぐにすべての正と連続シーケンスS?幸運を識別することができます!
話題のA.分析
タイトルは、いくつかのポイントは、に注意を払う必要があります。
1.このリストは、連続した正のシーケンス、および2つの数の最小値です。
ための特性の2などのアレイは、以下の式を用いて算出することができます。(すなわち、その合計の100方法1:(1 + 100)* 100/2)。
配列1.番号:注意することは、タイトルのような2点のみが見え、次のステップは、3つの概念アルゴリズムの核心です。2.アレイ実用的で。3.ターゲットのアレイ。
順に配列し、実際=ターゲットとは、その目的を達成することができ、アレイと大きな数字と1つ先の小数を持つ必要性を探し続けする場合には、
アレイは>実際のターゲットとは、この配列の10進数を前方に移動させる場合と比較して、最小数の少ないを有します。
それは次いで多数、ビビああを追加して実際の<ターゲットとアレイは、多数のアレイ内の番号を前方に移動したとき。
II。コードの実装
使用してSystem.Collections.Generic; クラスのソリューション { 公共リスト<リスト< int型 >> FindContinuousSequence(int型SUM) { // ここに壁紙コードを記述 //は、最終的な出力配列を定義 リスト<リスト< int型 >> RET = 新しい新しいリスト<リスト< int型 >> (); // :I = 1の定義、J = 2、理由は int型 I = 1、J = 2 ; // 少数のように、2の最終出力アレイの最小数として1:方法停止条件。和の半分を超えないようにすることができ、それが合計よりも大きいが、の和を超え、多数の10進数未満である必要があり 、一方を +(私は(合計< 1)/ 2私は<&& J) { // カウントに1を加える方法100):(例えば、連続番号は、それが加算式(小数多数であってもよいので+)*長さ/ 2 INT tmpSum =(Iは、J + 1)* (J - Iは、+ 1)/ 2 ; // 配列が目標数未満である場合、多数を加える必要が増加 IF(tmpSum < SUM) { J ++を; } // 等しいわずかに出力する 他の IF(tmpSum == SUM ) { // 配列の定義は、配列の長さは、IJの間の長さであり、 INTは [] =進新しい新しい INT [J - Iは、+ 1 ]; // 配列IJ由来する実行サイクル 用(INT K = I、L = 0 ; K <= J、K ++、L ++ ) { 進[L] = K; } // この配列は、リストに追加されているが定義 ret.Add(新しい新しいリスト< 整数 > (進を)); // そう実行する++ iはH ++およびJは、それを行う方法の他のある場合 、私は++ 、 J ++ ; } // 配列は、ターゲット番号、小数プラス1、そうアレイの数よりも大きい場合少数の右 他 { 私は ++ ; } } // リストに戻る リターンRET; } }