看板 java 關於我們 聯絡資訊
自家公司有需要 必須寫一個試算表程式 需求是這樣 現在有五個規格的產品 假設是 21 22 23 24 25 單位是公克 現在要包裝成 6/7/8粒 一盒 每盒限重假設是130g 列出所有組合的可能 EX: 21 21 22 23 24 代表六顆裡面 21規格的兩顆 22 23 24規格各一顆 我試著寫了一下,以每盒裝六粒為例子 列出所有組合可能: public static void main(String[] args) { System.out.println("count test"); int []pro = {0,21,22,23,24,25}; //五種規格 for(int i=1;i<=5;i++){ System.out.println(); for(int j=1; j<=5; j++ ) { for(int k=1; k<=5; k++ ) { for(int l=1; l<=5; l++ ) { for(int m=1; m<=5; m++ ) { for(int n=1; n<=5; n++ ) { if(pro[i]+pro[j]+pro[k]+pro[l]+pro[m]+pro[n]==130){ System.out.println(); System.out.print(pro[i]+" "); System.out.print(pro[j]+" "); System.out.print(pro[k]+" "); System.out.print(pro[l]+" "); System.out.print(pro[m]+" "); System.out.print(pro[n]+" "); System.out.print(pro[i]+pro[j]+pro[k]+pro[l]+pro[m]+pro[n]); } } } } } } } } } 這種寫法會造成重複的組合 EX 21 21 21 21 22 21 跟 22 21 21 21 21 21 其實是一樣的 請問各位高手我該如何修改我的程式 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.79.123
peacedove:用Set?? 06/14 21:34
tkcn:我覺得你把題目描述清楚比較重要,前面 a~e 的作用是什麼? 06/14 21:36
asilzheng:跑一次至少要跑5^6=15725次 要不要改用數學的排列組合? 06/14 21:37
asilzheng:算錯 是15625 06/14 21:38
kasuma:a~e那個地方這隻程式還用不到 06/14 21:43
※ 編輯: kasuma 來自: 114.32.79.123 (06/14 21:47)
asilzheng:變數改為記每種重量的數量如何?? 最後再依數量印出 06/14 22:20
lucky17:是小於等於130,還是要剛好要等於130 ? 06/14 22:24
lucky17:把 j -> for( j=i; ...) k -> for( k=j; ... ) 依此類推 06/14 22:26
peacedove:最近剛好在學java http://goo.gl/Ngiy8 06/14 23:22
peacedove:這個不知道符不符合你的需求 06/14 23:23
k900:http://j.mp/jk5C0z 我隨便寫的不知道對不對,原本就一整個怪 06/14 23:32
peacedove:唉呀 我沒注意到要重量=130XD 06/14 23:42
kasuma:感謝各位解答 我來琢磨琢磨 06/14 23:46
peacedove:更新了一下我連結的檔案 不過我的class主要只做排列組合 06/14 23:53
peacedove:判斷符不符合重量的部份寫在main裡面XD 06/14 23:56
lucky17:應該還不用出動sort吧?把j的起始從=i開始,k從=j開始,依此? 06/15 00:57