当前位置: 代码迷 >> 综合 >> HAUT OJ 1316: Choice学姐买糖果III
  详细解决方案

HAUT OJ 1316: Choice学姐买糖果III

热度:65   发布时间:2023-12-04 03:28:34.0

问题描述:

Choice学姐在糖果店里看这么多的糖果,她想如果能全部拿回家就好了。现在糖果店里有n种糖果(1-n编号),每种糖果有mi个(mi代表第i种糖果的个数),Choice 学姐只有两个纸袋,每个纸袋都最多装w个糖果。Choice学姐不想一个纸袋混有多种糖果(一次一个纸袋里只能装一种糖果),那么Choice学姐至少要拿多少次才能把这些糖果全部带回家呢?

输入:

第一行输入两个整数n,w(1 <= n ,w<= 1e4),用空格隔开

接下来一行n个空格分隔的整数mi,表示第i种糖果的个数。(1<= mi <= 1e3)。

输出:

输出至少要拿多少次,答案占一行。

样例输入:

6 5 
3 2 6 5 4 4

样例输出:

4

原因分析:

算出总共需要几个袋子后,袋子数/2要分情况,因为因为 / 结果是整数,即奇数会下取整,会少一次 ,所以可以将 奇数 偶数情况 合并    (ans+ 1) / 2   例如 7/2=3 ,数学上应该等于3.5,实际需要4次 ,偶数 8 需要4次,加1后仍然是四次     其实 ans/2  + 0.5   +0.5 相当于四舍五入

以后 实际应用中  /2  记得考虑下 奇偶两种情况,是否会产生影响 


解决方案:

#include <stdio.h>int main()
{int n, w, t;int ans = 0;scanf("%d%d", &n, &w);for(int i = 1; i <= n; i++) {scanf("%d", &t);ans += t / w;if(t % w)ans ++;}printf("%d\n", (ans+ 1) / 2);return 0;
}