概述:有一种6*6的箱子,有1*1, 2*2, 3*3, 4*4, 5*5, 6*6类型的货物,问给定的货物最少需要多少箱子才能全部装上。
思路:1个6*6,5*5,4*4的货物占用1个箱子,4个3*3的货物占1个箱子,9个2*2的货物占1个箱子,36个1*1的货物占1个箱子.。先计算6,5,4的货物占用的箱子,在计算3占用的箱子,并记录下多余出的3,然后用3和4余出的空位填2,然后用所有的空位填1.
感想:非常难,做了很久才做出来。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
//ifstream cin("aaa.txt");
int remain[4] = { 0,5,3,1 };
while (1)
{
int flag = 0;
int a[7];
for (int i = 1; i <= 6; ++i)
{
cin >> a[i];
flag += a[i];
}
if (flag == 0) break;
int sum = a[6] + a[5] + a[4] + (a[3] + 3) / 4;
int remainTwo = a[4] * 5 + remain[a[3] % 4];
if (remainTwo < a[2])
sum += (a[2] - remainTwo + 8) / 9;
int remainOne = sum * 36 - a[6] * 36 - a[5] * 25 - a[4] * 16 - a[3] * 9 - a[2] * 4;
if (remainOne < a[1])
sum += (a[1] - remainOne + 35) / 36;
cout << sum << endl;
}
return 0;
}