打包装箱 C++题解

这篇文章描述了一个数学问题,关于如何使用6*6的木箱子以最少数量打包不同底面积的纸箱子,以供贫困山区的孩子们阅读。通过编程解决纸箱数量分配和最小木箱数计算。
摘要由CSDN通过智能技术生成

打包装箱

内存限制: 128 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较

题目描述

八中开展爱心捐书活动,同学们纷纷踊跃把自己看过的旧书拿出来捐给贫困山区的孩子们,图书室的胥林老师把同学们捐献的书打包在了 6 种纸箱子里(打包好的各类纸箱子有若干个),纸箱子的高相同,但底面积分为1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6。现为了装车方便,需要把这些纸箱子装在若干个 6 * 6 的木箱子,木箱子的高和打包纸箱子相同,请你帮助胥老师,用最少的木箱子打包完所有的纸箱子。

输入格式

一行(六个数)用空格隔开

分别表示1 * 1、2 * 2、3 * 3、4 * 4、5 * 5、6 * 6六类纸箱子的个数( 每类箱子的个数小于等于  100 )

输出格式

一行,最少的木箱子个数

样例

样例输入
复制6 5 4 3 2 1
样例输出
复制7
#include <bits/stdc++.h>
using namespace std;
int ans;
int a[10];
int main() {
	for(int i = 1; i <= 6; i++) {
		scanf("%d", &a[i]);
	} 
	ans += a[6];
	ans += a[5];
	a[1] -= a[5] * 11;
	ans += a[4];
	a[2] -= a[4] * 5;
	ans += ceil(a[3] / 4.0);
	a[3] %= 4;
	if(a[3] == 3) {
		a[2] -= 1;
		a[1] -= 5;
	} else if(a[3] == 2) {
		a[2] -= 3;
		a[1] -= 6;
	} else if(a[3] == 1) {
		a[2] -= 5;
		a[1] -= 7;
	} 
	if(a[2] > 0) {
		ans += ceil(a[2] / 9.0);
	} 
	if(a[1] > 0) {
		if(a[2] < 0) {
			a[1] += a[2] * 4;
		} 
		if(a[1] > 0) {
			ans += ceil(a[1] / 36.0);
		} 
	} 
	printf("%d", ans);
	return 0;
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值