程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 遞歸-新手求教 1-n個數 k個不同的數一組 輸出所有可能

遞歸-新手求教 1-n個數 k個不同的數一組 輸出所有可能

編輯:編程綜合問答
新手求教 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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved