问题描述
一个工厂制造的产品形状都是长方体,它们的高度都是 h,长和宽都相等,一共有六个 他们的长宽分别为 1×1, 2×2, 3×3, 4×4, 5×5, 6×6. 这些产品通常使用一个 6×6×h 的长方型号,体包裹包装然后邮寄给客户。因为邮费很贵, 所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。
输入
输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为 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
算法实现
using System;
namespace Questions{
class Program{
public static void Main(string[] args){
while (true)
{
string input = Console.ReadLine();
string[] str = input.Split(' ');
int[] num = new int[6];
int sum = 0;
int flag = 0;
for (int i = 0; i < 6; i++){
num[5 - i] = int.Parse(str[i]);
if (num[5 - i] == 0)
flag++;
}
if (flag == 6)
break;
sum += num[0];
sum += num[1];
if (num[5] >= (num[1] * 11))
num[5] -= num[1] * 11;
else
num[5] = 0;
sum += num[2];
if (num[4] >= (num[2] * 5))
num[4] -= num[2] * 5;
else {
if (num[5] >= ((36-16)*num[2] - 4* num[4]))
num[5] -= (36 - 16) * num[2] - 4 * num[4];
else
num[5] = 0;
num[4] = 0;
}
int temp = num[3] % 4 ;
if (temp == 0)
sum += num[3] / 4;
else {
sum += num[3] / 4 + 1;
if (temp == 1) {
if (num[4] >= 5) {
num[4] -= 5;
if (num[5] >= 7)
num[5] -= 7;
else
num[5] = 0;
}
else {
if (num[5] >= (27-4* num[4]))
num[5] -= 27 - 4 * num[4];
else
num[5] = 0;
num[4] = 0;
}
}
}
temp = num[4] % 9;
if (temp == 0)
sum += num[4] / 9;
else
{
sum += num[4] / 9 + 1;
if(num[5]>=((9-temp)*4))
num[5] -= (9 - temp) * 4;
else
num[5] = 0;
}
temp = num[5] % 36;
sum += num[5];
if (temp == 0)
sum += num[5] / 36;
else
sum += num[5] / 36 + 1;
Console.WriteLine(sum);
}
Console.ReadKey();
}
}
}