为什么= 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;
}
答案 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));
对我没有任何意义,因为nfr
和kfr
都是零,但我想你想在完成逻辑之前编译代码。
编辑: 完整代码应如下所示:
#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$