C 生成只使用循环计算可能组合的代码

C 生成只使用循环计算可能组合的代码,c,C,我想要一些关于我正在写的代码的帮助。我需要写一个循环来计算我在程序中输入的一个数字的组合数,它需要检查我能用数字10,5,2,1做多少组合 例如,如果我输入5,则有4个组合-(5 | 2 2 1 | 2 1 1 | 11111) 我试过做一些循环,但我不知道如何让它工作,我正在考虑使用while循环,但我不知道如何计算组合,我真的非常感谢在这件事上的任何帮助 这是到目前为止我的代码 #include <stdio.h> void main() { printf("enter

我想要一些关于我正在写的代码的帮助。我需要写一个循环来计算我在程序中输入的一个数字的组合数,它需要检查我能用数字10,5,2,1做多少组合

例如,如果我输入5,则有4个组合-(5 | 2 2 1 | 2 1 1 | 11111)

我试过做一些循环,但我不知道如何让它工作,我正在考虑使用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);
}
#包括
void main()
{
printf(“输入数字”);
int num,i,m=2,计数器=0,g=2;
scanf_s(“%d”和&num);
对于(i=1;m>1;i++)
{
m=num-(5*i);
对于(i=1;g>1;i++)
{
计数器++;
g=m-(2*i);
}
}
printf(“计数器是%d\n”,计数器);
}
我的总体想法是从底层开始。例如,如果我输入10, 我得到
10-2
,然后计数器计数1,然后从8(10-2)中得到另一个-2,然后它再次计数,当我输入一个更高的数字,如5时,我希望一个循环删除
10-5=5
,然后向下到下一个循环并计数521,依此类推


我非常感谢你的帮助,谢谢

这里有一个你可以使用的策略

假设输入为N

首先,你可以说:“如果我一次使用10个组合,有多少个组合?”

这将是:

combinations = calculate_combinations_when_only_using_5_2_1(N-10);
combinations = calculate_combinations_when_only_using_5_2_1(N-20);
然后你可以说:“如果我两次使用10个组合,有多少个组合?”

这将是:

combinations = calculate_combinations_when_only_using_5_2_1(N-10);
combinations = calculate_combinations_when_only_using_5_2_1(N-20);
下次你使用10次,正好3次,以此类推

这可以转化为:

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;
}
使用类似的方法,您可以编写一个返回包含5的组合数的函数和另一个返回包含2的组合数的函数。记住:

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

现在你只需要
计算组合\u当只使用\u 5\u 2\u 1
计算组合\u当只使用\u 2\u 1
时,我将留给你来计算。

int main(void)
非常感谢,我会尝试的。!