一个奇怪的问题.............

free131 2005-09-01 05:26:52
一个组合问题,从N(6<N<20)个数中取所有的6个数的组合并输出结果:

int z = 0;
for(int h=0;h<N-5;h++)
for(int j=h+1;j<N-4;j++)
for(int k=j+1;k<N-3;k++)
for(int l=k+1;l<N-2;l++)
for(int m=l+1;m<N-1;m++)
for(int n=m+1;n<N;n++)
z++;
printf(%d,z);

发现一个问题,当N<=12时输出的结果是正确的,但是当N>12时输出的结果是错误的,比如N=13时,输出1716(正确值应该是1848),N=14时,输出3003(正确值应该是3696),N=15时,输出5005(正确值应该是7392),这个循环到底有什么问题,应该怎么修改呢,请达人指教..........
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyuan18 2005-09-01
  • 打赏
  • 举报
回复
组合问题应该用递归
zhouhuahai 2005-09-01
  • 打赏
  • 举报
回复
呵呵,从算法来看,是没错的
xiaocai0001 2005-09-01
  • 打赏
  • 举报
回复
怎么害你了啊?
你到底是想干什么的啊?
这个确实出来的就是C(m,n)的值啊
free131 2005-09-01
  • 打赏
  • 举报
回复
大哥,这个循环就是你昨天告诉我的啊:
----------------------------------
那不就得了
简单点的就用五层循环,不过写代码累些
for(i=0;i<16;i++)
for(j=i+1;j<17;j++)
for(k=j+1;k<18;k++)
for(l=j+1;l<19;l++)
for(m=l+1;m<20;m++)
{
B[0] = A[i];
B[1] = A[j];
B[2] = A[k];
B[3] = A[l];
B[4] = A[m];
}
//这不就完了~~~
//只不过写出来的代码不好看而已
--------------------------------------
害得我好惨啦......
xiaocai0001 2005-09-01
  • 打赏
  • 举报
回复
比如N=13时,输出1716(正确值应该是1848),N=14时,输出3003(正确值应该是3696)
----------------------------------------------
这个正确值从哪儿来的?
N=13时,从13个数中取6个数,一共有C(13,6)=1716种取法,怎么会是1848呢?
同样N=14时,从14个数中取6个数,一共是C(14,6)=3003, 怎么是3696呢?
xiaocai0001 2005-09-01
  • 打赏
  • 举报
回复
不好意思
理解错误~~~
xiaocai0001 2005-09-01
  • 打赏
  • 举报
回复
for(int h=0;h<N-5;h++)
-------------------
h应该从7开始循环吧?

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧