2017-04-25 2 views
-2

私が書いているコードを参考にしたいと思います。私は、プログラムに入力した数字の組み合わせの数を数えるループを書く必要があります。数10,5,2,1で、できる組み合わせを調べる必要があります。ループでのみ可能な組み合わせを数えるコードを作成する

たとえば、私が5を入力すると、(5 | 2 2 1 | 2 1 1 1 | 11111)の4つの組み合わせがあります。

私はいくつかのループを作ろうとしましたが、どのように動作させるか考えていませんでしたが、私はwhileループを使うことを考えていましたが、どのように組み合わせを数えるか分かりませんでした。問題。ここで

は私のコードは私の一般的な考え方は、下から開始することで、これまで

#include <stdio.h> 

void main() 
{ 
    printf("enter a number\n"); 
    int num, i, m = 2, counter = 0, g = 2; 
    scanf_s("%d", &num); 

    for (i = 1; m > 1 ; i++) 
    { 
     m = num - (5 * i); 
     for (i = 1; g > 1; i++) 
     { 
      counter++; 
      g= m - (2 * i); 
     } 
    } 

    printf("The counter is %d\n", counter); 
} 

です。例えば、私が10を入力した場合、 私は10 -2を得て、次にカウンターカウント1、そして8(10-2)から-2をもう一度カウントし、5のような高い数字を入力すると、 10 - 5 = 5と入力し、次のループに移動して5 2 2 1とカウントしてください。

本当にありがとうございました!

+0

'int main(void)' –

答えて

0

ここでは、使用できる戦略があります。

入力を想定がN

まずあるあなたが言うことができます:「私は10正確に1時間を使用している場合がありますどのように多くの組み合わせ?」だろう

combinations = calculate_combinations_when_only_using_5_2_1(N-10); 

次に、あなたが言うことができます:「私は10正確2時間を使用している場合がありますどのように多くの組み合わせ?」

それは次のようになります。

combinations = calculate_combinations_when_only_using_5_2_1(N-20); 

あなたは正確に3回というように10を使用し、次の時間。

これを変換することができます:あなたは5を備え組み合わせの数を返す関数を書くことができ、2を含み組み合わせの数を返す別の関数はただ覚えている同様のアプローチで

int calculate_combinations_which_includes_10(int N) 
{ 
    int result = 0; 
    while(N >= 10) 
    { 
     result += calculate_combinations_when_only_using_5_2_1(N-10); 
     N = N - 10; 
    } 
    return result; 
} 

int calculate_combinations_which_includes_1(int N) 
{ 
    return 1; // Always exactly 1 combination in this case 
} 

は今、あなたはあなたが把握するために、私は残しておきます calculate_combinations_when_only_using_5_2_1calculate_combinations_when_only_using_2_1を必要としています。

+0

ありがとう、私はそれを試みます! –

関連する問題