题目: 又到了一年毕业季,Noder也从学校毕业了。现在Noder要把东西进行打包,打包完成后,Noder的所有东西都被装进了若干个长方体形状的收纳盒中,这些收纳盒的高都是1024,底座是正方形且边长都是1到6之间的整数。现在Noder要进行搬家了,他有一辆车,这个车子的后备箱是一个长方体,高为1024,底座为边长是6的正方形,那么Noder想知道,他最少要运几趟才能把他所有的东西运完呢?
解法: 题目还是比较容易理解的,矩形里面套矩形,怎么使得次数最少,分情况讨论即可(代码也太不简洁了)直接贴代码了😂😂 代码:
#include<stdio.h>
#include<iostream>
using namespace std;
int a[7];
int main()
{
for(int i = 1; i < 7; i++)
scanf("%d", &a[i]);
int ans = 0;
ans += (a[4] + a[5] + a[6]);
a[1] -= a[5] * 11;
a[5] = 0;
if(a[1] < 0)
a[1] = 0;
int p = a[2]/5;
if(p >= a[4])
{
a[2] -= a[4]*5;
a[4] = 0;
}
else
{
a[2] -= p*5;
a[4] -= p;
}
if(a[4] > 0)
{
if(a[1] > 0)
{
a[1] -= 20-a[2]*4;
a[2] = 0;
a[4]--;
a[1] -= a[4]*20;
}
else
a[2]=0;
if(a[1] < 0)
a[1] = 0;
}
//cout <<ans <<endl;
//for(int i = 1; i < 7; i++)
// printf("%d %d\n",i, a[i]);
ans += a[3] / 4;
a[3] = a[3] % 4;
ans += a[2] / 9;
a[2] = a[2] % 9;
//cout <<ans <<endl;
// for(int i = 1; i < 7; i++)
// printf("%d %d\n",i, a[i]);
// cout << ans <<endl;
if(a[3] == 0)
{
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else if(a[3] == 1)
{
if(a[2] >= 5)
{
a[2] -= 5;
a[1] -= 7;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else
{
int sum = 27 - a[2] * 4;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
else if(a[3] == 2)
{
if(a[2] >= 3)
{
a[2] -=3;
a[1] -= 6;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else
{
int sum = 18 - a[2] * 4;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
else if(a[3] == 3)
{
if(a[2] >= 1)
{
a[2] -= 1;
a[1] -= 5;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else{
int sum = 9;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
printf("%d\n",ans);
}