题目: 又到了一年毕业季,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);

}