1と2の合計で数値を作成する方法

Aug 16 2020

1と2だけを使って数を合計する可能な方法を数える方法があるかどうか疑問に思っています

例えば:

数は10です。数10は次のように合計できます。

1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1  
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2
2 + 2 + 2 + 2 + 2 
etc...

よろしくお願いします!

回答

1 amit Aug 17 2020 at 03:22

コメントで説明されているように(つまり、1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2と同じ2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)、要素の順序が重要でない場合、これは単純に合計内の要素の数を選択することです。これは5〜10の範囲です。要素の数を選択すると、次のようになります。それらの数が1である必要があり、それらの数が2である必要があることを正確に知っています。x要素の場合、10 x 2があり、残りは1です。

選択できる数字は6つあるので、これが10を作成する方法の数です。

another_CS_guy Aug 17 2020 at 05:36

複雑な数式を使用するのではなく、DPアプローチをお勧めします。


    int arr[N+1]; // Represents no. of ways to produce a number at index 1
    // Like arr[5] is no. of ways to produce number 5
    
    for(int i=0;i<=N;i++) {
      arr[i] = 1; // As all 1s
    }
    
    for(int i=2;i<=N;i++) {
      // if we add 2 now, check for no. of ways i-2 can be made, 
      // add it to current arr[i] value.
      arr[i] += arr[i-2];
    }
    
    cout<< (arr[N]); // print

RahulBhobe Aug 17 2020 at 18:07

ものだけを使用して番号を作成する方法の数=1
数を作成するには、いくつかの方法が使用して少なくとも1 2 =floor(n/2)
合計=1 + floor(n/2)

javascript以下のコードスニペットを参照してください。

let numWays = n => 1 + Math.floor(n/2);

for (let i=1; i<=20; i++)
    console.log("Number of ways to create " + i + " is: " + numWays(i));