马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "求几的阶乘:";
cin >> n;
int i;
int v;
int p = 1;
int q = 1;
for (i = 0; i <= n; i++)
{
int f;
f = i;
if (i == 0)
{
v = 1;
cout << v << " ";
}
else if (i == 1)
{
v = n;
cout << v << " ";
}
else if (i == n)
{
v = 1;
cout << v;
}
else
{
int k;
for (k = 0; k < i; k++)
{
p *= n;
q *= f;
n = n - 1;
f = f - 1;
}
v = p / q;
cout << v << " ";
}
}
return 0;
}
这串代码是输出n的组合数的一个代码
当n输入4的时候
预期结果是输出1 4 6 4 1
但是我在编译器运行的时候运行结果只有1 4 6
请问各位大神们这是什么原因导致的啊
楼主经过我多次尝试,定义p,q变量到else语句里,因为else中循坏后p,q值会变。
把41行改为p *= (n-k),并把43行注释掉(虽然不知道什么原理,按道理来说是一样的)。
简化后代码实现如下:
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "求几的阶乘:";
cin >> n;
int i;
int v;
for (i = 0; i <= n; i++)
{
int f;
f = i;
if (i == 0)
{
v = 1;
cout << v << " ";
}
else
{
int p, q;
p = q = 1;
int k;
for (k = 0; k < i; k++)
{
p *= (n - k);
q *= f;
f = f - 1;
}
v = p / q;
cout << v << " ";
}
}
return 0;
}
|