C++打包问题

3 篇文章 0 订阅
3 篇文章 0 订阅

一个工厂把产品包装在正方形的箱子里,尺寸有1×1,2×2,3×3,4×4,5×5,6×6六种,高度为h。产品最终总是捆扎成高度为h的6×6的包裹箱子送到客户手里,因为客户希望包裹箱子越少越好。请你编写一个程序计算最少需要多少只包裹箱子才能把客户买的产品送完。

输入包含多组数据。每组数据有一行,包含6个整数,用空格隔开,分别代表1×1的产品、2×2的产品……6×6的产品的个数。输入6个0时退出。

每组数据输出一行,输出最少需要的包裹箱子数。

0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
2
1

代码:

#include<iostream>

using namespace std;

int nBox[7];
int nBigBox;

void vPack();

int main()
{
    int nSum,i;

    for(i=1;i<=6;i++)
        cin >> nBox[i];

    nSum=nBox[6]+nBox[5]+nBox[4]+nBox[3]+nBox[2]+nBox[1];
    while(nSum!=0)
    {
        nBigBox=0;
        vPack();
        cout << nBigBox << endl;

        for(i=1;i<=6;i++)
            cin >> nBox[i];

        nSum=nBox[6]+nBox[5]+nBox[4]+nBox[3]+nBox[2]+nBox[1];
    }
    return 0;
}

void vPack()
{
    int n1X1=0,n2X2=0;
    int nTemp;

    nBigBox+=nBox[6];
    nBigBox+=nBox[5];
    nBigBox+=nBox[4];
    n2X2+=nBox[4]*5;
    nBigBox+=nBox[3]/4;
    nTemp=nBox[3]%4;
    if(nTemp>0)
    {
        nBigBox++;
        switch(nTemp)
        {
            case 1:n2X2+=5;break;
            case 2:n2X2+=3;break;
            case 3:n2X2+=1;break;
        }
    }
    if(nBox[2]>n2X2)
    {
        nBigBox+=(nBox[2]-n2X2)/9;
        nTemp=(nBox[2]-n2X2)%9;
        if(nTemp>0)
        {
            nBigBox++;
        }
    }
    n1X1=nBigBox*36-nBox[6]*36-nBox[5]*25-nBox[4]*16-nBox[3]*9-nBox[2]*4;
    if(nBox[1]>n1X1)
    {
        nBigBox+=(nBox[1]-n1X1)/36;
        nTemp=(nBox[1]-n1X1)%36;
        if(nTemp>0)
        {
            nBigBox++;
        }
    }
}
void vInput()
{
    int i;

    for(i=1;i<=6;i++)
    {
        cin >> nBox[i];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值