藍橋杯——裝箱問題,算法設計基礎——裝箱問題

題目描述

一個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有6個型號,他們的長寬分別爲11, 22, 33, 44, 55, 66。這些產品通常使用一個 66h 的長方體包裹包裝然後郵寄給客戶。因爲郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有一個好的程序幫他們解決這個問題從而節省費用。現在這個程序由你來設計。

輸入數據

輸入包括多行,每一行代表一個訂單。每個訂單裏包括6個整數t1,t2,t3,t4,t5,t6,中間用空格隔開,分別爲11 ~ 66這六種產品的數量。以6個0結束。

輸出要求

除了輸入的最後一行6個0以外,輸入文件裏每一行對應着輸出文件的一行,每一行輸出一個整數代表對應的訂單所需的最小包裹數。

樣例輸入
	0 0 4 0 0 1
	7 5 1 0 0 0
	0 0 0 0 0 0
輸出樣例

2
1

#include<iostream>
using namespace std;
int main()
{
	int a,b,c,d,e,f;  // 產品規格
	int x=0,y=0,n=0;  // x:表示能放下1*1的個數 , y:表示能放下2*2的個數 , n:包裹數
	while(true){
		cin>>a>>b>>c>>d>>e>>f;
		if(a==0 && b==0 && c==0 && d==0 && e==0 && f==0)
			break;
		n=f+e+d+(c+3)/4;  // 計算大塊頭所需箱子數
		y=d*5;   // 可知6*6、5*5都放不了2*2的,一個箱子放了4*4的還能放5個2*2的
		if(c%4 == 1)  
			y+=c*5;
		if(c%4 == 2)
			y+=c*3;
		if(c%4 == 3)
			y+=c*1;
		if(b>y)  // 如果2*2的個數大於能放得下2*2的個數,要加箱子
			n+=(b-y+8)/9;
		x=n*36-f*36-e*25-d*16-c*9-b*4;  
		if(a>x)  // 同上
			n+=(x-a+35)%36;
		cout<<n<<endl;
	}
		return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章