[問題] 試算表

看板java作者 (寬)時間14年前 (2011/06/14 21:14), 編輯推噓8(808)
留言16則, 6人參與, 最新討論串1/1
自家公司有需要 必須寫一個試算表程式 需求是這樣 現在有五個規格的產品 假設是 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

06/14 21:34, , 1F
用Set??
06/14 21:34, 1F

06/14 21:36, , 2F
我覺得你把題目描述清楚比較重要,前面 a~e 的作用是什麼?
06/14 21:36, 2F

06/14 21:37, , 3F
跑一次至少要跑5^6=15725次 要不要改用數學的排列組合?
06/14 21:37, 3F

06/14 21:38, , 4F
算錯 是15625
06/14 21:38, 4F

06/14 21:43, , 5F
a~e那個地方這隻程式還用不到
06/14 21:43, 5F
※ 編輯: kasuma 來自: 114.32.79.123 (06/14 21:47)

06/14 22:20, , 6F
變數改為記每種重量的數量如何?? 最後再依數量印出
06/14 22:20, 6F

06/14 22:24, , 7F
是小於等於130,還是要剛好要等於130 ?
06/14 22:24, 7F

06/14 22:26, , 8F
把 j -> for( j=i; ...) k -> for( k=j; ... ) 依此類推
06/14 22:26, 8F

06/14 23:22, , 9F
最近剛好在學java http://goo.gl/Ngiy8
06/14 23:22, 9F

06/14 23:23, , 10F
這個不知道符不符合你的需求
06/14 23:23, 10F

06/14 23:32, , 11F
http://j.mp/jk5C0z 我隨便寫的不知道對不對,原本就一整個怪
06/14 23:32, 11F

06/14 23:42, , 12F
唉呀 我沒注意到要重量=130XD
06/14 23:42, 12F

06/14 23:46, , 13F
感謝各位解答 我來琢磨琢磨
06/14 23:46, 13F

06/14 23:53, , 14F
更新了一下我連結的檔案 不過我的class主要只做排列組合
06/14 23:53, 14F

06/14 23:56, , 15F
判斷符不符合重量的部份寫在main裡面XD
06/14 23:56, 15F

06/15 00:57, , 16F
應該還不用出動sort吧?把j的起始從=i開始,k從=j開始,依此?
06/15 00:57, 16F
文章代碼(AID): #1Dzrwe-D (java)