?? 計算下一個組合的c語言源代碼.txt
字號:
計算下一個組合的C語言源代碼[原創(chuàng)]
以前寫過幾個關于求任意組合的代碼,有興趣的朋友可以比較一下:
http://bugeyes.blog.edu.cn/user1/20989/archives/2005/264294.shtml
http://bugeyes.blog.edu.cn/user1/20989/archives/2005/302729.shtml
http://bugeyes.blog.edu.cn/user1/20989/archives/2006/1113179.shtml
從n個數(shù)中取r個數(shù)的組合,假設c1c2c3...cr是其中一個組合,則計算其下一個組合的算法如下:
Step 1:求滿足不等式cj<n-r+j的最大坐標,并設為i。即i=max{j | cj<n-r+j}
Step 2:設置ci=ci+1
Step 3:設置cj=cj-1+1,對于j=i+1,i+2,i+3,...,r
下面的代碼演示了從任意n個符號中取r個符號的組合的過程,其中在計算某組合的下一個組合時利用了上面的算法。
#i nclude <conio.h>
int fun(int choice[],int r,int n)
{//利用了上面的算法,計算下一個組合
int i,j;
for(i=r-1;i>=0;i--)
if(choice[i]<n-r+i)
break;
if(i<0)//已經(jīng)是最后一個了
return 0;
choice[i]+=1;
for(j=i+1;j<r;j++)
choice[j]=choice[j-1]+1;
return 1;//還有后續(xù)組合
}
void comb(char source[],int total,int count)
{
int choice[5];
int i;
for(i=0;i<count;i++)//人工設置第一個組合
choice[i]=i;
do
{
printf("\n");
for(i=0;i<count;i++)
{//輸出當前組合
int t=choice[i];
printf("%c ",source[t]);
}
}while(fun(choice,count,total));
}
void main()
{
char array[5]={'a','b','c','d','e'};
clrscr();
comb(array,5,2);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -