我想要一些我正在写的代码的帮助。我需要编写一个循环来计算程序中输入的数字组合的数量,它需要检查我可以做多少组合,数字为10,5,2,1。
例如,如果输入5,则有4种组合 - (5 | 2 2 1 | 2 1 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);
}
我的一般想法是从底部开始。例如,如果我输入10,
我得到10 -2
然后计数器计数1,然后另一个-2从8(10-2)再次计数,当我输入更高的数字如5时我想要一个循环去除10 - 5 = 5
,然后进入下一个循环并计算5 2 2 1,依此类推......
我真的很感激一些帮助,谢谢!
答案 0 :(得分:0)
这是您可以使用的策略。
假设输入为N
首先你可以说:&#34;如果我使用10次一次,会有多少种组合?&#34;
那将是:
combinations = calculate_combinations_when_only_using_5_2_1(N-10);
然后你可以说:&#34;如果我使用10次两次,会有多少种组合?&#34;
那将是:
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
}
现在,您只需要calculate_combinations_when_only_using_5_2_1
和calculate_combinations_when_only_using_2_1
,我就会留下来了解。