作者kasuma (寬)
看板java
標題[問題] 試算表
時間Tue Jun 14 21:14:12 2011
自家公司有需要 必須寫一個試算表程式
需求是這樣
現在有五個規格的產品
假設是 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:這個不知道符不符合你的需求 06/14 23:23
推 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