Façons de créer un nombre avec la somme de un et de deux

Aug 16 2020

Je me demande s'il existe un moyen de compter les manières possibles de faire la somme d'un nombre en utilisant seulement un et deux

Par exemple:

Nous avons le nombre 10. Le nombre 10 peut se résumer par:

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...

Merci d'avance à tous!

Réponses

1 amit Aug 17 2020 at 03:22

Si l'ordre des éléments n'a pas d'importance, comme l'expliquent les commentaires (c'est-à 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2- dire qu'il est identique à 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), il s'agit simplement de choisir le nombre d'éléments dans la sommation, qui peut être compris entre 5 et 10. Une fois le nombre d'éléments choisi, vous savoir exactement combien d'entre eux doivent être des 1 et combien d'entre eux doivent être des 2: pour x éléments, il y a 10-x 2, et le reste est 1.

Puisqu'il y a 6 nombres à choisir, c'est le nombre de façons de créer 10.

another_CS_guy Aug 17 2020 at 05:36

Plutôt que d'entrer dans des formules mathématiques complexes, je recommanderais l'approche 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

Nombre de façons de créer un nombre en utilisant seulement un = 1
Nombre de façons de créer un nombre en utilisant au moins un deux = floor(n/2)
Total =1 + floor(n/2)

Voir l' javascriptextrait de code ci-dessous:

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));