題目:
描述
一個(gè)工廠制造的產(chǎn)品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個(gè)型號(hào),他們的長寬分別為11, 22, 33, 44, 55, 66。這些產(chǎn)品通常使用一個(gè) 66h 的長方體包裹包裝然后郵寄給客戶。因?yàn)猷]費(fèi)很貴,所以工廠要想方設(shè)法的減小每個(gè)訂單運(yùn)送時(shí)的包裹數(shù)量。他們很需要有一個(gè)好的程序幫他們解決這個(gè)問題從而節(jié)省費(fèi)用?,F(xiàn)在這個(gè)程序由你來設(shè)計(jì)。
輸入
輸入文件包括幾行,每一行代表一個(gè)訂單。每個(gè)訂單里的一行包括六個(gè)整數(shù),中間用空格隔開,分別為11至66這六種產(chǎn)品的數(shù)量。輸入文件將以6個(gè)0組成的一行結(jié)尾。
輸出
除了輸入的最后一行6個(gè)0以外,輸入文件里每一行對應(yīng)著輸出文件的一行,每一行輸出一個(gè)整數(shù)代表對應(yīng)的訂單所需的最小包裹數(shù)。
樣例輸入
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
樣例輸出
2
1
參考代碼:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 6;
int a[N];
void init() {
memset(a, 0, sizeof(a));
}
int numofboxes() {
int box = 0;//一共要裝產(chǎn)品的盒子的個(gè)數(shù);
box += a[5];//6*6*h的產(chǎn)品每個(gè)都需要裝滿一個(gè)盒子;
box += a[4];//5*5*h的產(chǎn)品, 每個(gè)產(chǎn)品裝一個(gè)盒子, 之后會(huì)產(chǎn)生11個(gè)空格, 但空格僅滿足放1*1*h的產(chǎn)品;
a[0] = max(0, a[0] - a[4] * 11);//1*1*h的產(chǎn)品可能不夠, 也可能有剩余, 剩余的話則之前裝5*5*h的盒子都已經(jīng)填滿;//之后a[0]表示剩余的1*1*h的產(chǎn)品數(shù);
box += a[3];//填充4*4*h的產(chǎn)品;
if (a[1] >= a[3] * 5) {//一個(gè)4*4*h的產(chǎn)品裝入后還剩5個(gè)2*2*h的空間;//a[3] * 5表明一共有含有4*4*h的盒子的數(shù)目中的空余格子, 每個(gè)盒子都可以最多裝5個(gè)2*2*h的產(chǎn)品;
a[1] -= a[3] * 5;//填充2*2*h的產(chǎn)品;
}
else {//2*2*h的產(chǎn)品不夠;
a[0] = max(0, a[0] - 4 * (a[3] * 5 - a[1]));//再用1*1*h的產(chǎn)品填充本應(yīng)放2*2*h的產(chǎn)品的空間;
a[1] = 0;//一個(gè)2*2空間可放4個(gè)1*1*h的產(chǎn)品;
}
box += (a[2] + 3) / 4;//每4個(gè)3*3*h的產(chǎn)品獨(dú)占一個(gè)盒子;//此時(shí)一個(gè)產(chǎn)品不足以單獨(dú)占一個(gè)盒子;
a[2] = a[2] % 4;//余下的3*3*h的產(chǎn)品數(shù);
if (a[2]) {//有剩余的3*3*h的產(chǎn)品;
if (a[1] >= 7 - 2 * a[2]) {//2*2*h的產(chǎn)品還有剩余;//1個(gè)盒子內(nèi)可放1個(gè)3*3*h的產(chǎn)品加5個(gè)2*2*h的產(chǎn)品加7個(gè)1*1*h的產(chǎn)品;
a[1] = a[1] - (7 - 2 * a[2]);
a[0] = max(0, a[0] - (8 - a[2]));
}
else {//2*2*h的產(chǎn)品沒有剩余;
a[0] = max(0, a[0] - (36 - 9 * a[2] - 4 * a[1]));//一個(gè)盒子中除去3*3*h的產(chǎn)品和2*2*h的產(chǎn)品的位置, 剩下的位置就是裝1*1*h的產(chǎn)品的位置;
a[1] = 0;
}
}
box += ((a[1] + 8) / 9);//如果還有剩余的2*2*h的產(chǎn)品, 則添加;//一個(gè)盒子最多可以裝9個(gè)2*2*h的產(chǎn)品;
a[1] = a[1] % 9;//剩余的2*2*h的產(chǎn)品數(shù)目;
if (a[1]) {//如果還有剩余的2*2*h的產(chǎn)品;
a[0] = max(0, a[0] - (36 - 4 * a[1]));//一個(gè)2*2*h的產(chǎn)品可占4個(gè)格子;
}
box += (a[0] + 35) / 36;//一個(gè)盒子最多可以放36個(gè)1*1*h的產(chǎn)品;
return box;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
while (cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5]) {
if (a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && a[4] == 0 && a[5] == 0) {
break;
}
int ans = numofboxes();
cout << ans << endl;
}
return 0;
}