这是我编的,基本可以全部列举,但输出的时候相同头尾的多组第1和第k个数只输出一次(例如1开头5结尾:输出1 23 24 34 5 我想输出1 2 3 5 , 1 2 4 5, 1 3 4 5)怎么办用的递归
函数第一个形参是每组数的数量 上例为5
#include
#include
int ii;
int iii;
int bbb(int n,int i, int j, int k,int a[])
{
for(int iii=i; iii<k; iii++)
{
printf("%d ",a[j]);
printf("%d ",a[iii]);
printf("%d,\n",a[k]);
}
// printf("@i=%d,j=%d,@",i,j);
return 0;
}
int aaa(int i/*每组数的数量*/,int j/*头标记*/,int k/*尾标记*/,int n/*, int m */,int a[])//计算插值基函数系数
{
if(j == k)
k=j+i-1;
if(i == 0)
return 1;
else if (i == 1 && k<=n-1)
{
printf("%d,",a[j]);
printf("k=%d,j=%d,\n",k,j);
aaa(i, j+1, k+1, n, a);
}
else if (i == 2 && k<=n-1)
{
// printf("2k=%d,j=%d,",k,j);
printf("%d ",a[j]);
printf("%d,\n",a[k]);
k++;
if(k > n-1)
{
j++;
k = j+i-1;
}
aaa(i, j, k, n, a);
}
else if (i == 3 && k<=n-1)
{
//printf("3k=%d,j=%d,",k,j);
bbb(i,j+1,j,k,a);
k++;
if(k > n-1)
{
j++;
k = j+i-1;
}
aaa(i, j, k, n, a);
}
else if(i > 3 && k<=n-1)
{
//printf("4.1k=%d,j=%d,I=%d\n",k,j,i);
printf("{%d \n",a[j]);
aaa(i-2,j+1,k-1,k,a);
printf("%d},\n",a[k]);
k++;
// printf("4k=%d\n",k);
if(k > n-1)
{
j++;
k = j+i-1;
}
// printf("4.2k=%d,j=%d,n=%d,\n",k,j,n);
aaa(i, j, k, n, a);
}
}
int main()
{
int a[10]={0};
for(int i=0; i<10; i++)
a[i]= i+1;
for(i=0; i<10; i++)
printf("i=%d",a[i]);
printf("\n");
int n = 6;
aaa(4,0,0,n,a);
return 0;
}