算法的那些事C#题库

0007-装箱问题

2017-03-11  本文已影响78人  指尖极光

问题描述

一个工厂制造的产品形状都是长方体,它们的高度都是 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();
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读