c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的排列数。
有道题需要这个函数,但是不会。百度了好久,也没有找到合适的代码,而且好多都看不明白。还请高人给个算法,并且加上注释,非常感谢!好的话追加分数。...
有道题需要这个函数,但是不会。百度了好久,也没有找到合适的代码,而且好多都看不明白。还请高人给个算法,并且加上注释,非常感谢!好的话追加分数。
展开
4个回答
展开全部
就是求C(n,m)的值?按定义,C(n,m)=n*n-1*n-2*...*(n-m+1)/m!,就这么做呗。。
int ans = 1; //答案
int i;
for (i = n; i >n-m; i--) ans = ans * i; //先计算n*(n-1)*...*(n-m+1),就是顺次乘n乘n-1一直乘到n-m+1
for (i = 1; i<=m; i ++) ans = ans / i; //再除以m的阶乘,顺次除1除2除3一直除到m。。
ans就是答案……这边没有c的编译器,include还有语法错误什么的就不搞了。。
int ans = 1; //答案
int i;
for (i = n; i >n-m; i--) ans = ans * i; //先计算n*(n-1)*...*(n-m+1),就是顺次乘n乘n-1一直乘到n-m+1
for (i = 1; i<=m; i ++) ans = ans / i; //再除以m的阶乘,顺次除1除2除3一直除到m。。
ans就是答案……这边没有c的编译器,include还有语法错误什么的就不搞了。。
展开全部
啥 你的题目有问题呀,能不能向你以往提问一样,有输入样例和输出样例
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很理解你的问题,给举个例子。
追问
C(5,3)=10。
这咱们都知道,我需要的是用程序实现这个。
追答
int c(int n, int m)
{
if(m=n) return 1;
else
{
int res=1;
int fin=m;
for(int i=0;i<fin;i++,n--)
{
res=res*n ;
}
for(int j=0;j<fin;j++,m--)
{
res=res/m;
}
return res;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很理解你说的什么意思。。 是求排列么 ? 带公式就好了吧。。
追问
就是给个具有题述功能的函数
追答
说实话。。就是看不懂你的叙述。。 不过看了你在楼下写的东西还是明白了 。C语言不是很清楚了。。给你写点伪代码吧,当然尽量贴近代码格式吧。。函数定义写出来就行了吧
而且既然是C语言。。那就默认不用库函数好了。。
函数就设
int Com(int x, int y) // C(5,3)=10 照着你这个来的
{
int r = 1 ; //用于存储结果 (c语言注释是双斜杠吧。。我都忘了)
int f = x - y ; //停止标记
for(int i=0 ; i<f ; i++ )
{
r = r*x ; //就不用那著名的装X的写法了 。。
}
for ( i=0; i<f;i++)
{
r=r/y;
}
return r ;
}
看看 如果有问题的话 可能出在循环那里吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询