组合公式“n!/((n-k)!* k!)”不起作用

时间:2013-02-09 22:48:27

标签: c function combinations

为什么= n! /((n-k)!* k!)不打印?

此代码也会解决下面的问题吗?

卡住。

"The number of combinations of n things taken k at a time as an integer"

稍微澄清一下:“例如,a,b,c,d一次取三个项目的组合是abc,abd,acd和bcd。换句话说,总共有四个不同四件事的组合“一次三个”。“

#include <stdio.h>
#include <math.h>   

int main (void)
{
    int z = 0, n_in, k_in, k = 0, n = 0, result, nfr = 0, kfr = 0;

    do
    {
        printf("Enter the number of items in the list (n):");
        scanf("%d*c", &n_in);

        if (n_in>1 && n_in<11)
        {

            printf("Enter the number of items to choose (k)");
            scanf("%d*c", &k_in);

            if (k_in>0 && k_in<5)
            {

                if (k_in <= n_in)
                {

                    k_in = k;
                    n_in = n;


                    result = n! / ((n-k)!*k!);


                    z = 1;

                }

                else
                    printf("?Please Try again k must be less than n \n");
            }

            else
                printf("?Invalid input: Number must be between 1 and 4 \n");

        }

        else
            printf("?Invalid input: Number must be between 1 and 10 \n");


    } while (z == 0);

    result = (nfr / (nfr * kfr));
    printf("k value = %d n value = %d the result is %d", nfr, kfr, result);


    return 0;
}   

2 个答案:

答案 0 :(得分:2)

这一行:

result = n! / ((n-k)!*k!);

...是无效的C代码。 C中的!表示“不”。

您需要提供a factorial function,以便致电:

  result = factorial(n) / (factorial(n-k) * factorial(k));

答案 1 :(得分:0)

!不是C中的NOT运算符。请改用此阶乘函数。

int factorial(int n)
{
  return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}

所以你的计算是:

result = factorial(n) / (factorial(n-k)*factorial(k));

可能有更快的方法,但这是可读的。

此外,这一行

result = (nfr / (nfr * kfr));

对我没有任何意义,因为nfrkfr都是零,但我想你想在完成逻辑之前编译代码。

编辑: 完整代码应如下所示:

#include <stdio.h>
#include <math.h>

int factorial(int n)
{
    return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}

int main (void)
{
    int z = 0, n_in, k_in, k = 0, n = 0, result, nfr = 0, kfr = 0;
    do
    {
        printf("Enter the number of items in the list (n):");
        scanf("%d*c", &n_in);

        if (n_in>1 && n_in<11)
        {
            printf("Enter the number of items to choose (k)");
            scanf("%d*c", &k_in);
            if (k_in>0 && k_in<5)
            {
                if (k_in <= n_in)
                {
                    k_in = k;
                    n_in = n;
                    result = factorial(n) / (factorial(n-k)*factorial(k));
                    //result = n! / ((n-k)!*k!);
                    z = 1;
                }
                else
                    printf("?Please Try again k must be less than n \n");
            }
            else
                printf("?Invalid input: Number must be between 1 and 4 \n");
        }
        else
            printf("?Invalid input: Number must be between 1 and 10 \n");
    } while (z == 0);
    //result = (nfr / (nfr * kfr));
    printf("k value = %d n value = %d the result is %d\n", nfr, kfr, result);
    return 0;
}

输出:

~/so$ gcc test.cc
~/so$ ./a.out 
Enter the number of items in the list (n):3
Enter the number of items to choose (k)2
k value = 0 n value = 0 the result is 1
~/so$