-6

为什么是=n!/ ((nk)!*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;
}   
4

2 回答 2

2

这一行:

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

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

您将需要提供一个阶乘函数,以便您可以调用:

  result = factorial(n) / (factorial(n-k) * factorial(k));
于 2013-02-09T22:53:01.820 回答
0

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

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$
于 2013-02-09T22:53:15.750 回答