[問題] 請問關於排列組合程式

看板C_and_CPP作者 (千月星痕)時間14年前 (2011/08/11 18:37), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/4 (看更多)
開發平台(Platform):DevC++ 問題(Question): 我想寫個排列組合的程式C n取r的那種... (不考慮字元相同但排序不同的組合) 但是想要讓使用者自訂n和r的數字... 我是先訂一個很大的陣列塞進字元串, 然後用指標下去跑,但是自訂r的話就不知道該怎做 以下是很弱的程式碼。。。還有想問的問題 #include <stdio.h> #include <stdlib.h> int main(void){ char list[40]; //定義陣列 int chars = -1; int a; scanf("%d",&a); printf("%d\n",a); 對不起這邊就出現問題了...我只要加了上面這三行,程式在下面秀出排列組合字樣 時就會自動結束...但我只要註解掉上面這三行就可以正常跑!? 另外這三行跟程式沒有關係,只是我在一開始測試用的... printf("輸入排列組合的字元串,數目請小於40"); char *i,*j,*k; //輸入字串到陣列 while(a!=0){ int inp = getchar(); if(inp == '\n'){break;} if(inp == EOF){return 0;} chars++; list[chars]=inp; list[chars+1]=EOF; } //排列組合 for(i=list;*i!=*j;*i++){ for(j=i+1;*j!=*k;*j++){ for(k=j+1;*k!=EOF;*k++){ printf("%c%c%c\n",*i,*j,*k); } } } system("pause"); return 0; } 這個程式現在小於40個字以內可以組合出不重複的組合...但因為我只有3個指標 所以現在等於是C n取3的狀況...想請問該如何讓r=3改成使用者自訂r呢? 對不起我問題很多...在這邊謝過各位高手> < -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.223.131

08/12 02:37, , 1F
你需要的是遞迴
08/12 02:37, 1F

08/12 02:40, , 2F
排列 或 組合 ?
08/12 02:40, 2F
請問 遞回應該怎麼做呢... 然後。。。呃...算組合? 舉例來說 設四個字ABCD 取3個的話 他會排出ABC ABD ACD BCD 共四種,其他的就算重複(比方CBA),不需要算進去這樣... 另外,我真的很想知道為什麼加了那三行程式會跳出來...~"~ ※ 編輯: zgmfx2000 來自: 140.123.223.131 (08/12 02:49)

08/12 03:13, , 3F
那是'\n'沒去處理 然後又被inp = getchar()拿到'\n'的關係
08/12 03:13, 3F

08/12 03:13, , 4F
改成scanf("%d ",&a);多個空白 要scanf把空白字元清掉吧
08/12 03:13, 4F

08/12 03:23, , 5F
解決了 謝謝k大的指導^^
08/12 03:23, 5F
文章代碼(AID): #1EH25REl (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EH25REl (C_and_CPP)