1
已采纳
陆麟瑞
资深天翼
资深天翼
用搜索与回溯来做组合,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。 void search(int t) { int i; if(t>r) { total++; return; } for(int i=1; i<=n; i++){ if(!b[i]&&i>a[t-1]||t==1) { a[t]=i; b[i]=true; search(t+1); a[t]=0; b[i]=false; } } }
1
叶卓舒
初级守护
初级守护
组合数就是从1到n个数中抽取k个数(不重复)组合起来(从小到大),问一共有多少种组合放法,
如n=3,k=2:
1,2
1,3
2,3
这3种。
这题是搜索回溯。
用过程写:
递归边界:
如果当前已经选好了k个数,则放法数加1,退出当前过程。
选定每个一个数的条件是:
(1):当前数小于前一个数。
(2):当前数没有被用过。
0
夏子健
初级光能
初级光能
while(i!=0)
{
s=s*n;
n--;
i--;
}
j=r;
while(j!=0)
{
k=k*r;
j--;
r--;
}
cout<<s/k;//这题不用搜索与回溯也行吧,谢**你跟踪执行这个程序就行了。
0
0
郑怡翔
初级天翼
初级天翼
只要按照一个公式来写程序就可以了:
结果=m*(m-1)*(m-2)......*(m-n+1)
前面是定义,输入
for(i=m-n+1;i<=m;i++)
{
nde*=i;
}
for(i=1;i<=n;i++)
{
mde*=i;
}
最后输出:cout<<nde/mde;
不要忘了所有变量都必须是long long类型,不然不是100分哦!
0
0
0
0
0