C++求组合的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:23:52
今天看到一个程序是求组合的,列出从n个数中取r个的所有组合情况:
#include <stdio.h>
const int N = 9;
int a[N] = {1,2,3,4,5,6,7,8,9};
int b[N];
int r = 4;
char used[N];
int count;
void combine(int pos)
{
int i;
if(pos==r)
{
for(i = 0;i<r;i++)
{
printf("%d ",a[b[i]]);
}
printf("\n");
count++;
return;
}
//这里是关键,第i个位置上的数,只能是从排在第i位的数开始的N-r个中的一个,后面的数一定要比前面的大
for(i = (pos>0?(b[pos-1]+1):pos);i<=pos+N-r;i++)
{
if(!used[i])
{
b[pos] = i;
used[i]++;
combine(pos+1);
used[i]--;
}
}
}
int main()
{
combine(0);
}
这一句不太懂for(i = (pos>0?(b[pos-1]+1):pos);i <=pos+N-r;i++) ,哪位能解释一下.
我不懂的是为什么i = b[pos-1]+1; 或i = pos;
大家注意一下,我不是语法看不懂!!!!!!!!是这句的含义不清楚

for(i = (pos>0?(b[pos-1]+1):pos);i <=pos+N-r;i++)

等于

if(pos>0)
i = b[pos-1]+1;
else
i = pos;

for(;i<=pos+N-r;i++)

就是上面的条件选择句

?:
唯一的三目运算符

i=a?b:c
--->
if(a!=0) i=b;
else i=c;