Re: [問題] 排列組合1~9的所有可能

看板C_and_CPP作者 (darkjack101)時間15年前 (2010/04/12 04:32), 編輯推噓3(307)
留言10則, 7人參與, 最新討論串2/5 (看更多)
下面是我的程式碼 但跑出來的結果 好像不是很正確 就是我去計算可能的可能 和理論上的不相同 (p.s第五個數一定要是數字5,其他任意但不可重複) #include<stdio.h> #include <time.h> double ta,tb; double T; int main(void) { ta=time(0); int a,b,c,d,e=5,f,g,h,i,j=1,input; for (a=1;a<=9;a++) { if (a==5) continue; for (b=1;b<=9;b++) { if (b==a||b==5) continue; for (c=1;c<=9;c++) { if (c==b||c==5||c==a) continue; for (d=1;d<=9;d++) { if (d==c||d==5||d==b||d==a) continue; for (f=1;f<9;f++) { if (f==d||f==5||f==a||f==b||f==c) continue; for(g=1;g<=9;g++) { if (g==a||g==b||g==c||g==d||g==5||g==f) continue; for(h=1;h<=9;h++) { if(h==a||h==b||h==c||h==d||h==5||h==f||h==g) continue; for(i=1;i<=9;i++) { if(i==a||i==b||i==c||i==d||i==5||i==f||i==g||i==h)continue; {printf("%d%d%d%d%d%d%d%d%d--%d\n",a,b,c,d,e,f,g,h,i,j); j=j+1; } } } } } } } } } tb=time(0); T=ta-tb; printf("%g",T); scanf("%d",&input); return 0; } ※ 引述《darkjack101 (darkjack101)》之銘言: : 遇到的問題: (題意請描述清楚) : 想要排列組合1~9 不可以以重複 : 希望得到的正確結果: : 希望可以得到最快的方式 : 程式跑出來的錯誤結果: : 我是利用for loop 分九次 : 類似填空格 填九個空格 : ex 第一次跑1~9,然後第二次一樣跑1~9並將和第一次重複的去除 : 第三次一樣跑1~9,同理把一二次重複的去除.... : 但這樣須要跑很久 : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : C -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.93.52

04/12 12:36, , 1F
怎麼又是世界奇觀寫法 XDDD
04/12 12:36, 1F

04/12 12:39, , 2F
請參考DJWS的Backtracking教學 http://tinyurl.com/y8d9jr2
04/12 12:39, 2F

04/12 13:27, , 3F
雖然說迴圈解會比遞迴快,但這運算時間遠不如列印的時間
04/12 13:27, 3F

04/12 13:49, , 4F
你的程式碼f<9而不是f<=9,所以f不會有9結果才會少
04/12 13:49, 4F

04/12 13:50, , 5F
時間全部耗在列印上,輸出到檔案就會很快
04/12 13:50, 5F

04/12 13:51, , 6F
另外ta-tb是錯的,後面tb減前面ta才對
04/12 13:51, 6F

04/12 14:53, , 7F
就算要遞迴轉迴圈 也不是這樣寫的
04/12 14:53, 7F

04/12 20:58, , 8F
蠻漂亮的說真的..
04/12 20:58, 8F

04/12 22:41, , 9F
推世界奇觀寫法...XD
04/12 22:41, 9F

04/13 00:40, , 10F
又是個世界奇觀XDDD 去看看backtrack吧..
04/13 00:40, 10F
文章代碼(AID): #1Bmg9Ihr (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Bmg9Ihr (C_and_CPP)