制作一个只用循环计算可能组合的代码

时间:2017-04-25 20:23:52

标签: c

我想要一些我正在写的代码的帮助。我需要编写一个循环来计算程序中输入的数字组合的数量,它需要检查我可以做多少组合,数字为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,依此类推......

我真的很感激一些帮助,谢谢!

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_1calculate_combinations_when_only_using_2_1,我就会留下来了解。