Re: [問題] 排列組合
#include <stdio.h>
#include <stdlib.h>
int array[7] = {1,2,3,4,5,6,7};
int m = 7, n = 3; // C(m,n)
int *tmpArray;
void Combination(int allNum, int pickNum, int firstIndex);
int main()
{
tmpArray = new int[n];
Combination(m,n,0);
delete []tmpArray;
system("pause");
return 0;
}
void Combination(int allNum, int pickNum, int firstIndex)
{
if ( pickNum <= 0 ) {
for( int j = n-1; j >= 0; j-- )
printf( "%d", tmpArray[j] );
printf("\n");
return;
}
for ( int i = firstIndex; i <= allNum-pickNum; i++ ) {
tmpArray[pickNum - 1] = array[i];
Combination( allNum, pickNum-1, i+1 );
}
}
※ 引述《rosemary7962 (甜)》之銘言:
: 小妹這兩天在寫程式作業遇到一些困難
: 就是可怕的排列組合
: 要找C n取k的一串數值的加總
: 我現在把排列組合寫出來了
: 可是無法把重複的結果刪掉
: 比如說C 5 取4還是會印出5!個結果
: 不知道要怎麼辦>"<
: 以下是程式碼:
: #include <stdio.h>
: #include <stdlib.h>
: int next(int n, int current, int perm[])
: {
: int i, collision;
: while (perm[current]++ < n)
: {
: collision = 0;
: for (i=0; i<current; i++)
: if (perm[current] == perm[i])
: {
: collision = 1;
: break;
: }
: if (!collision) return 1;
: }
: perm[current] = 0;
: return -1;
: }
: void main()
: {
: int n,k , perm[30]={0}, current=0, solCount=0, i,j;
: double x[30]={0}, sum=0;
: scanf("%d%d",&n,&k);
: for(j=0;j<n;j++)
: scanf("%lf",&x[j]);
: while (current>=0)
: {
: current += next(n, current, perm);
: if (current == n)
: {
: solCount++;
: printf("\n%4d: ", solCount);
: for (i=0; i<k; i++)
: {
: printf("%.3f(%d) ", x[perm[i]-1], perm[i]);
: sum += x[perm[i]-1];
: }
: printf("sum = %.3f", sum);
: current = n-1;
: sum = 0;
: }
: }
: printf("\nTotal %d permutations\n", solCount);
: system("pause");
: }
--
所有我腦袋裡有一隻魚,靜靜躺在水底。
好像不怎麼熱鬧。
也許我應該再放點什麼東西進去,像是,一條鯨魚。
這樣我就可以坐在沙發上吃爆米花,
看那條鯨魚吃那隻小魚,在我還沒考慮到腦容量之前。
不然我很想把海明威也放進去。 『養條魚在腦袋裡』
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.71.10
※ 編輯: wxWidgets 來自: 219.87.71.10 (11/28 18:35)
討論串 (同標題文章)