Re: [問題] 排列組合

看板C_and_CPP作者 (Keep silence)時間15年前 (2010/11/28 18:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
#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)
文章代碼(AID): #1CyYzswU (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1CyYzswU (C_and_CPP)