包裹
有一間工廠生產的東西,被包裝在相同高度 h 的正方形容器內,但其面積大小分別有:1×1, 2×2, 3×3, 4×4, 5×5, 6×6 等六種尺寸。這些產品總是用高度為 h,面積為 6×6 的箱子打包後寄給客戶。因為成本關係,當然希望將客戶所訂購的產品放在最少的箱子裡寄出。請你寫一個程式找出寄送這些產品最少需要多少個箱子,這可以使工廠節省下不少錢。
Input
每組測試資料一列(就是一份訂單),含有 6 個整數。分別代表 1×1 到 6×6 產品的數目。若此 6 個整數均為 0 代表輸入結束。
Output
對每一組測試資料,輸出寄送這些產品最少需要多少個箱子。
範例輸入:
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
範例輸出:
2
1
/*----- ----- ----- -----*/ //2-Packets //Made by 105502555 Teemo Hsu(Synasaivaltos) //Date: 2018/05/04 /*----- ----- ----- -----*/ #include <iostream> #include <vector> using namespace std; int main(void) { int s1,s2,s3,s4,s5,s6; int t1,t2; vector<int> ans; while(true) { cin >> s1 >> s2 >> s3 >> s4 >> s5 >> s6; if(s1+s2+s3+s4+s5+s6==0) break; ans.push_back(s6); ans.at(ans.size()-1)+=s5; if((s1-=s5*11)<0) s1=0; ans.at(ans.size()-1)+=s4; t1=s4*20; if(s2>=s4*50) t1=0,s2-=s4*5; else { t1=s2*4,s2=0; if(s1>=t1) s1-=t1,t1=0; else t1-=s1,s1=0; } ans.at(ans.size()-1)+=(s3/4),s3%=4; if(s3) { ans.at(ans.size()-1)++; t1=36-s3*9,t2=(3-s3)*2+1; if(s2>=t2) s2-=t2,t1-=t2*4; else t1-=s2*4,s2=0; if(s2>=t1) s1-=t1,t1-=s1; else t1-=s1,s1=0; } ans.at(ans.size()-1)+=s2/4,s2%=9; if(s2) { ans.at(ans.size()-1)++; t1=36-s2*4; if(s1>=t1) s1-=t1,t1-=s1; else t1-=s1,s1=0; } ans.at(ans.size()-1)+=s1/36+(s1%36!=0); } for(int i=0;i<ans.size();cout<<ans.at(i)<<endl,i++); return 0; } |