C语言OJ题——1091装箱问题

装箱问题

  • 1.题目
  • 2.解题思路
  • 3.代码实现
  • 4.细节补充说明

1.题目

题目描述
一个工厂生产的产品形状都是长方体,高度都是h,主要有1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6等6种。这些产品在邮寄时被包装在一个6 * 6 * h的长方体包裹中。由于邮费很贵,工厂希望减小每个订单的包裹数量以增加他们的利润。因此他们需要一个好的程序帮他们解决这个问题。你的任务就是设计这个程序。

输入
输入包括多组测试数据,每一行代表一个订单。每个订单里的一行包括六个整数,用空格隔开,从小到大分别为这6种产品的数量。6个0表示文件结束。

输出
针对每个订单输出一个整数,占一行,代表对应的订单所需的最小包裹数。没有多余的空行。

样例输入
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0

样例输出
2
1

2.解题思路

这题需要我们从大到小来分析每种型号的产品占用多大的箱子。
(1)6 * 6:毫无疑问,6 * 6的产品每个都会占用一整个箱子,因此有多少个6 * 6的产品,必须有多少个箱子,而且没有任何空余的空间存放其他产品。
(2)5 * 5:该产品也必须自己占用一个箱子,但是会有剩余,剩余的部分为6 * 6 - 5 * 5=11,这11个空间很显然只能存放1 * 1大小的产品,因此,5 * 5的可以和1 * 1放在一起,可以放11个11的产品。
(3)4 * 4:该产品也需要自己占用一个箱子,剩余的空间既可以放2 * 2的产品,能放5个,也可以全部放1 * 1的产品,能放20个。
(4)3 * 3:该产品也需要自己占用一个箱子,但是由于是6的一半,也就是说4个3 * 3的产品正好可以装满一个整箱子,因此我们可以根据3 * 3的产品数来对4求余,如果余数为0,说明正好是4的倍数,直接除以4就是所需的箱子数,不再有剩余空间。如果余数不为0,那么则是除以4取整后再加1。这时候就会出现剩余空间,这要分三种情况来考虑,一是余数为1,也即1个箱子里只放1个3 * 3的产品,那么剩余的空间为27,最多可以放5个2 * 2的空间和7个1 * 1的空间(或者全放1
1则可以放27个),同样,余数为2的话,则剩余的空间为18,最多可以放3个2 * 2和6个1 * 1(或者18个1 * 1),最后一种就是余数为3,则剩余空间为9,最多只能放1个2 * 2和5个1 * 1(或者9个1 * 1)。
(5)2 * 2:该产品可以和44或33产品放一起,因此我们可以先把44和33产品剩余下来的22空位全部占满,如果不够,则需要重新占用新箱子,很显然9个2 * 2产品正好占满一个箱子,所需新箱子的数量应该对9求余,余数为0,则直接整除9即可,否则整除9后再加1。
(6)1 * 1:该产品最简单了,可以先把所有剩余的1
1空间占满,如果不够,则重新占用新箱子,很显然一个6 * 6的箱子可以存放36个1 * 1,因此剩余的1*1产品数对36求余,余数为0,直接整除36,否则整除36加1。
最后把这6种情况各自所需的箱子数累加起来就是题目所要的结果。

3.代码实现

#include <stdio.h>
int main()
{int p[7];//p[1] - p[6]分别表示1*1,2*2,...,6*6的个数,p[0]不用管,创建7个元素只是为了对应标记方便int pack3_2[4] = {0,5,3,1},pack3_1[4] = {0,7,6,5};//pack3_2[i]表示装i个3*3时可以装2*2的个数(i>0)//也就是混装的情形while(1){int sum = 0;scanf("%d%d%d%d%d%d",&p[1],&p[2],&p[3],&p[4],&p[5],&p[6]);if(p[1] == 0 && p[2] == 0 && p[3] == 0 && p[4] == 0 && p[5] == 0 && p[6] == 0 )break;//装6*6sum += p[6];//装5*5sum += p[5];p[1] = p[1] - 11*p[5];//装4*4sum += p[4];p[2] = p[2] - 5*p[4];//优先装2*2的,所以这里不再写p[1] = p[1] - 20*p[1] —————————— (1)//装3*3sum += (p[3] + 3) / 4;p[3] = p[3] % 4;if(p[3] > 0)//剩下3*3的货物为1个或2个或3个{p[2] = p[2] - pack3_2[p[3]];p[1] = p[1] - pack3_1[p[3]];}//开始装2*2if(p[2] < 0)//说明原有的箱子够装2*2了{p[1] = p[1] + 4*p[2];//此时把原来计划用于装2*2的用来装1*1,比如2*2的箱子只有1个,(1)式中p[2] ==//-4,说明那4个原本用于装2*2的此时要装1*1}//到这里装5*5,4*4,3*3的箱子已经完全被填满,需要额外的箱子装1*1和2*2if(p[2] > 0) //还剩下2*2的{sum += (p[2] + 8) / 9;p[2] = p[2] % 9;p[1] = p[1] - (36 - p[2]*4);//这一步容易错,我就是在这里写错!!}//1*1if(p[1] > 0){sum += (p[1] + 35) /36;}printf("%d\n",sum);}return 0;
}

4.细节补充说明

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java使用Redis实现分页功能

分页功能实现应该是比较常见的&#xff0c;对于redis来说&#xff0c;近期刷题就发现了lrange、zrange这些指令&#xff0c;这个指令怎么使用呢&#xff1f; 我们接下来就来讲解下。 目录 指令简介lrangezrange Java实现Redis实现分页功能 指令简介 lrange lrange 是 Redis 中…

Cesium for Unreal 从源码编译到应用——插件编译

一、安装环境 Unreal Engine 5.3 CMake 3.17.5 Microsoft Visual Studio 2019 二、源码准备 下载cesium-unreal-samples工程。 git clone https://github.com/CesiumGS/cesium-unreal-samples.git 然后在工程目录创建Plugins文件夹&#xff0c;并下载cesium-unreal工程。 …

keepalived双主模式测试

文章目录 环境准备部署安装keepavlived配置启动测试模拟Nginx宕机重新启动问题分析 环境准备 测试一下keepalived的双主模式&#xff0c;所谓双主模式就是两个keepavlied节点各持有一个/组虚IP&#xff0c;默认情况下&#xff0c;二者互为主备&#xff0c;同时对外提供服务&am…

ubuntu系统个人部署LangChain过程

官方教程&#xff0c;github和huggingface都需要梯子&#xff1a; 开发环境部署 chatchat-space/Langchain-Chatchat Wiki (github.com) 具体参考官方的&#xff0c;这里额外记录一下官方文档里面没有写的。 安装前&#xff0c;确保openSSL版本是新的 查看当前环境下是否有…

从宏观到微观——泽攸科技ZEM系列台式扫描电子显微镜在岩石分析中的应用

岩石作为地球地壳的主要构成物质之一&#xff0c;其微观结构对于了解地质过程、资源勘探以及工程建设具有重要意义。按照岩石的成因&#xff0c;可以把它们分为三类&#xff1a;岩浆岩、沉积岩和变质岩。在地球表面&#xff0c;沉积岩占据75%的份额&#xff0c;而在地壳深度&am…

简单计算器的实现

思路&#xff1a; 1.记录输入的中缀表达式(运算符在中间&#xff0c;我们正常写的式子) 2.将中缀表达式——>后缀表达式 由左到右遍历中缀表达式&#xff0c;若是数字&#xff0c;用数组或队列记录(记录后缀表达式)&#xff1b;若是符号&#xff0c;与操作符栈中的栈顶元素…

SVN服务备份

hotcopy备份 window批处理 保存以下内容到svn_buckup.bat&#xff0c;确保内容的路径正确&#xff0c;最后双击bat文件进行备份即可 echo offrem SVN安装路径 set svn"C:\Program Files\VisualSVN Server\bin"rem 仓库根目录 set homeE:\Repositories\WorkSpacere…

vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复

1. 问题 ElementUI的form表单&#xff0c;当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度&#xff0c;例如 ‘50px’。作为 Form 直接子元…

【Simulink系列】——动态系统仿真 之 连续系统线性连续系统

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 一、连续系统定义 连续系统输出在时间上连续变化&#xff0c;而非间隔采样取值&#xff0c;满足以下条件&#xff1a; ①输出连续变化&#xff0c;变化的间隔…

OpenAI 的 Sora AI 视频生成器太疯狂了

毫不夸张地说&#xff0c;当我第一次看到 Sora 生成的前几个视频时&#xff0c;我的下巴都惊掉了。 Sora是什么&#xff1f; Sora 是一种人工智能模型&#xff0c;可以根据简单的文本提示生成视频。它能够生成一分钟的高保真视频。 Sora 是一种扩散模型&#xff0c;一种先进的…

阿赵UE学习笔记——15、灯光的移动性概念和构建光照信息

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;这次来学习一下UE里面灯光的移动性概念和构建光照信息。 1、灯光移动性 打开一个带有灯光的场景 在大纲面板里面找到其中一个灯光&#xff1a; 会发现灯光的细节面板里面&#xff0c;…

智慧环卫建设方案

三、软件工程的总体构架 3.1框架构建基准 3.2框架设计 四、业务应用层主要功能模块 4.1数据字典管理模块 数据字典主要包含有&#xff08;GIS&#xff09;地理信息管理系统、信息安全管理系统、平台接口管理系统等三个方面的管理应用&#xff1b; 1).&#xff08;GIS&#…

「Python系列」Python字典

文章目录 一、Python字典创建字典访问字典中的元素修改字典删除字典中的元素遍历字典字典推导式 二、Python字典内置函数&方法内置函数字典方法 三、Python简介四、相关链接 一、Python字典 在Python中&#xff0c;字典&#xff08;dict&#xff09;是一个无序的键值对集合…

springboot/ssmHome F家居系统Java家居商城购物管理系统

springboot/ssmHome F家居系统Java家居商城购物管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&…

package.json文件详解

packages.json文件里面配置的属性的含义 name和version 以上两个是最重要的两个属性&#xff0c;否则模块无法被安装&#xff0c;一起形成了它的唯一标识符 模版中内容变化&#xff0c;版本也要随之一起变化 description 描述&#xff0c;方便别人理解模块作用 main 程序…

3、windows环境下vscode开发c/c++环境配置(二)

前言&#xff1a;上一篇文章写了windows环境下&#xff0c;配置vscode的c/c开发环境&#xff0c;这一篇讲vscode开发c/c的配置文件&#xff0c;包括c_cpp_propertues.json&#xff0c;task.json及launch.json。 一、总体流程 通过c/c插件我们就可以来编写c/c程序了&#xff0c…

【ArcGIS微课1000例】0104:二位面状数据转三维多面体(建筑物按高度拉伸)

文章目录 一、加载数据二、添加高度字段三、三维拉伸显示四、生成三维体数据五、注意事项一、加载数据 打开ArcScene,加载配套实验数据(0104.rar中的二维建筑物矢量数据,订阅专栏,获取专栏所有文章阅读权限及配套数据),如下图所示: 二、添加高度字段 本实验将二维数据…

3、电源管理入门之CPU热插拔详解

目录 简介 1. 省电技术概览 (1)、cpu hotplug和idle的区别? 2. 热插拔代码介绍 (1)、为什么以cpu1为例? 3. ATF中处理 简介 之前介绍了电源的开机和关机重启,本小节开始介绍省电的技术,其中最暴力的省电方法就是直接拔核hotplug处理,就像需要…

什么是 Wake-on-LAN?如何使用 Splashtop 远程喊醒电脑

在当今数字互联的世界里&#xff0c;远程访问电脑已不仅仅是一种便利&#xff0c;而是许多人的需要。无论是远程工作、IT 支持&#xff0c;还是管理整个网络中的计算机群&#xff0c;我们都必须掌握正确的工具和技术。 其中一项在远程访问中发挥关键作用的技术是 Wake-on-LAN …

带你了解SMTP,POP3,IMAP协议

电子邮件&#xff08;email&#xff09;是一种电子通信方式&#xff0c;可以通过网络传输文本、图像、音频和视频等信息。在发送和接收电子邮件时&#xff0c;需要使用一种称为“邮件协议”的标准化协议。常用的电子邮件协议有SMTP、POP3和IMAP。 SMTP&#xff08;Simple Mail…