c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的排列数。

有道题需要这个函数,但是不会。百度了好久,也没有找到合适的代码,而且好多都看不明白。还请高人给个算法,并且加上注释,非常感谢!好的话追加分数。... 有道题需要这个函数,但是不会。百度了好久,也没有找到合适的代码,而且好多都看不明白。还请高人给个算法,并且加上注释,非常感谢!好的话追加分数。 展开
 我来答
凌夙羽
推荐于2018-04-30
知道答主
回答量:7
采纳率:0%
帮助的人:12.6万
展开全部
就是求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还有语法错误什么的就不搞了。。
741852963一
2012-05-06 · TA获得超过268个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:214万
展开全部
啥 你的题目有问题呀,能不能向你以往提问一样,有输入样例和输出样例
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jinan0812
2012-05-06 · 贡献了超过118个回答
知道答主
回答量:118
采纳率:0%
帮助的人:35.3万
展开全部
不是很理解你的问题,给举个例子。
追问
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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q00223344
2012-05-06 · TA获得超过227个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:192万
展开全部
不是很理解你说的什么意思。。 是求排列么 ? 带公式就好了吧。。
追问
就是给个具有题述功能的函数
追答
说实话。。就是看不懂你的叙述。。 不过看了你在楼下写的东西还是明白了 。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 ;
}

看看 如果有问题的话 可能出在循环那里吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式