请勿直接复制黏贴代码,算法思想是关键。
刚开始研究这道题的时候,没搞懂大致的题意,之后终于想通了。 这题给了我们N个物品、N个默认大小为100的箱子和N个物品对应的大小。 如果我们把一个大小为60的物品,放入了序号为1的箱子中,那这个1号箱子还剩下40的空间能装其他的物品。 这道题的贪心思想,就是寻求最大的空间利用率,即最小的箱子使用数。
针对之后需要输出物品的大小和所在箱子序号的情况,这个时候可以利用结构体数组,或者你使用两个数组来存储对应的关系也行。 结构体数组的序号可以初始化,也可以不初始化,因为之后仍需要对每一个物品进行所在箱子序号的判断。
除了物品对应的结构体数组外,还需要定义物品数/箱子数N、箱子剩余量的数组box、放置物品所用的箱子数num 初始化箱子的容量你可以和我一样用循环,也可以使用int box[1000]={100}在定义的时候就进行初始化。
然后可以使用双重循环,外循环是对物品结构体数组的遍历,内循环是对箱子数组遍历。 每当当前的箱子容量大于等于当前物品的大小时,就用一个变量index_box变量记录这个箱子的编号, 并扣除对应箱子的容量,再break出来避免之后不必要的遍历。 在每一次的箱子遍历结束后,就将找到的箱子编号存到物品信息当中。
之后就是输出所有箱子的大小和对应的箱子编号。 在计算箱子使用的数量时,只需要遍历box数组,找到其中剩余容量不为100的箱子并统计数量即可。