yz454170989
yz454170989
采纳率52.6%
2015-04-15 12:33

新手求教 1-n个数 k个不同的数一组 输出所有可能

已采纳

这是我编的,基本可以全部列举,但输出的时候相同头尾的多组第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;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

相关推荐