求循环里面的if(a[i]-i<=n-r+1)//可以向试探
为何判断条件是a[i]-i<=n-r+1
#include<bits/stdc++.h>
#define max 50
int a[max];
void F(int n, int r)
{
int i,j;
i=0;
a[i]=1;
while(1)
{
if(a[i]-i<=n-r+1) //可以向前试探//
{
if(i==(r-1)) //找到一个组合//
{
for(j=0;j<r;j++) //输出当前组合r个一个组合//
printf("%4d",a[j]);
printf("\n");
a[i]++;
continue;
}
i++; //向前试探//
a[i]=a[i-1]+1;
}
else //回溯//
{
if(i==0) //找完全部解//
return;
a[--i]++;
}
}
}
int main(void)
{
int n,r;
printf("Enter n r :");
scanf("%d%d",&n,&r);
printf("正整数1~%d中的%d个数的任意组合:\n",n,r);
F(n,r);
}