目录问题引入问题介绍和思路解决方案问题引入题目描述一个工厂制造的产品形状都是长方体他们的高度都是h长和宽都相等一共有6个型号他们的长宽分别为1X12X23X34X45X56X6。这些产品通常需要一个6X6Xh的长方体包裹包装然后邮寄给客户。因为邮费很贵所以工厂要想方设法地减少每个订单运送时的包裹数量。他们很需要有一个好的程序以解决这个问题从而节省费用。现在这个程序由你来设计。输入每个订单信息用包括6个整数的一行数据表示中间用空格隔开分别为1X1至6X6这6种产品的数量。输出输出一个整数代表对应的订单所需的最小包裹数。样例输入9 5 3 2 4 6样例输出13问题介绍如题目所述我们需要求得订单所需的最小包裹数就说明需要尽量地利用每一个包裹中的空间。接下来我们分别讨论不同情况下可以计算的最优方案。因为2X2和1X1的产品比较小可以考虑用来补其他包裹剩下的空隙。先考虑用2X2来补空最后用1X1来补剩下杂乱的空位。放入6X6产品时这时包裹被装满不能再放入别的包裹。放入5X5产品时这时包裹有剩余空间但只能放入1X1的包裹。放入4X4产品时这时的包裹剩余空间较大最多可以放入5个2X2包裹。放入3X3产品时放入3X3产品的情况比较特殊因为包裹中可以放下不同数量的3X3产品所导致剩余的空间中放入的2X2产品数量会不一样。放入4个3X3产品时这时包裹被装满不能放入其他产品。放入3个3X3产品时这时剩余的空间最多能放入1个2X2产品。放入2个3X3产品时这时剩余的空间最多能放入3个2X2产品。放入1个3X3产品时这时剩余的空间最多能放入5个2X2产品。至此复杂的情况已经分析完毕接下来可以进行代码的书写。解决方案#includestdio.h#includemath.hintmain(){return0;}设置数组来储存6种不同产品的数量为了方便可以直接舍弃product[0]。同时根据上文中我们讨论的不同数量3X3产品时2X2产品最多能放入的量也创立数组同样舍弃s3_l2[0]。读入6种产品的数量。定义总需要的包裹数为bgs。intproduct[7]{0};ints3_l2[4]{0,5,3,1};scanf(%d %d %d %d %d %d,product[1],product[2],product[3],product[4],product[5],product[6]);intbgs0;先计算6X6到3X3产品需要的包裹数。由于在3X3产品数不是4的倍数时需要额外再加一个包裹此处采用ceil函数。同时判断剩余用来可存放2X2的空间是否足够2X2产品的数量如果不够就继续加。bgsproduct[6]product[5]product[4]ceil(product[3]*1.0/4);intkwei_2product[4]*5s3_l2[product[3]%4];if(product[2]kwei_2){bgsceil((product[2]-kwei_2)*1.0/9);}然后计算剩余可以用来存放1X1产品的空间与实际数量进行比较不够就继续加。我们在这里计算采用总的空间-已经用去的空间。intkwei_1bgs*36-product[6]*36-product[5]*25-product[4]*16-product[3]*9-product[2]*4;if(product[1]kwei_1){bgsceil((product[1]-kwei_1)*1.0/36);}最后输出结果bgs。printf(%d\n,bgs);到这里本道题已经解决完毕下面是本题的完整代码。#includestdio.h#includemath.hintmain(){intproduct[7]{0};ints3_l2[4]{0,1,3,5};intbgs;scanf(%d %d %d %d %d %d,product[1],product[2],product[3],product[4],product[5],product[6]);bgsproduct[6]product[5]product[4]ceil(product[3]*1.0/4);intkwei_2product[4]*5s3_l2[product[3]%4];if(product[2]kwei_2){bgsbgsceil((product[2]-kwei_2)*1.0/9);}intkwei_1bgs*36-product[6]*36-product[5]*25-product[4]*16-product[3]*9-product[2]*4;if(kwei_1product[1]){bgsbgsceil((product[1]-kwei_1)*1.0/36);}printf(%d\n,bgs);return0;}到了这里很感谢大家可以看完如果有什么不足可以提出我会努力改进的。