2011-12-25 5 views
0

最初の数多くの豊富な数値(12,18,20,24)など、あるセットの線形結合として生成できるすべての数を効率的に計算する方法を理解しようとしています。問題は、私が現在取り組んでいるアプローチは、合計が100を超えないa * 12 + b * 18 + c * 20 + d * 24の数字をすべて実行することです。今は2つの方法を考えました。 whileループの最上位にある条件に基づいて異なるものをインクリメントする複数の入れ子のwhileループまたはwhileループ。両方の方法で私の問題は、私はまだいくつかの異なる数を集計しようとしているかわからないので、実行時までに必要な条件付きリストまたはネストされたループがどれくらいあるか分かりません。私のプログラムを書いて、n個のn回のネストされたn回、またはn個のn個の条件を満たすようにする方法はありますか?ここで複数のネストされたループを作成する

は、スイッチ・ブロックの概要である:

int count=1; 
while(true){ 
    if(num2<smal){ 
     switch(count){ 
     case 1: 
      a++; 
      break; 
     case 2: 
      b++; 
      break; 
     case 3: 
      c++; 
      break; 
     case 4: 
      d++; 
      break; 
     } 
    } 
    else { 
     switch(count){ 
     case 1: 
      if(a!=0){ 
       a=0; 
       b++; 
      } 
      else{count++;} 
      break; 
     case 2: 
      if(b!=0){ 
       b=0; 
       c++; 
       count--; 
      } 
      else{count++;} 
      break; 
     case 3: 
      if(c!=0){ 
       c=0; 
       d++; 
       count--; 
      } 
      else{count++;} 
      break; 
     case 4: 
      break; 
     } 
    } 
    //num is update here 
    if(count==4){break;} 


} 

答えて

0

そして、私はあなたが使用しているどのような言語か分からないが、あなたは、あなたが行く必要がありますどのように多くのレベルの深わからない場合再帰を考慮する必要があります(数百または数千でない限り、スタックを吹くことになります)。

再帰に精通していない場合は、関数呼び出しがある場所を参照してください。ここにばかげた例があります。

Result doStuff(Stuff stuff, int level) { 
    SubResult sr = null; 
    if(stuff > 0) { 
     sr = doStuff(stuff, level -1); 
    } 
    Result r = interesting_calculation(stuff, sr); 
    return r; 
} 

再帰は難しいかもしれませんが、時にはジョブに適したツールです。

+0

おそらく、それを考えることができたはずです。私はC + +のbtwを使用しています。私は私のアプローチを再検討する必要があるかもしれないと思う。再帰がすぐに手を伸ばしてしまうような気がします。 – emschorsch

+0

うわープロジェクトオイラーの質問を誤解していたことに気付きました。それは質問が信じられないほど難しいと思った理由です。 LOLは私が今理解しているように、それはほとんど自明ではないようです。私は2つの数字の和として表現することができる数字を見つける必要があります。それは、すべてをすべて単純化する数字の倍数を含んでいません。とにかく助けてくれてありがとう。 – emschorsch

+0

好奇心が強い、あなたは質問にリンクできますか?ありがとう! – Bill

関連する問題