题目描述
小明是一名快递员,他现在手上一共有N个快件需要运送。但是货车有限,所以我们希望用最少的货车来进行工作。现在已知,一辆车的限定额度为最多放置K件货物。此外,小明很不喜欢13这个数字,所以他不希望任何一辆货车中的货物数量为13。 现在小明想要知道,最少使用多少辆货车能够将这N个快件都放置到货车上。
输入描述:
题目包含多组输入,每一组输入一行两个数,分别表示N 和 K 1<=N<=1000 1<=K<=1000
输出描述:
输出一行一个数字,表示最优结果。
示例
输入
13 13
5 2
输出
2
3
分析
从题可知,要想让使用的货车数量最少,则应尽量将货车装满。由于货车不能装13件货物,但可以装大于或者小于13件货物,所以可以将输入的K(货车最大放置货物数)分为三种情况:
1、K < 13:无需考虑货物装13件货物的情况,即货车的最大满载量就是K,此时使用最少货车数量应该是:货物总量 / 货车最大满载量,且如果货物总量 / 货车最大满载量有余数则还需要再加一辆货车,如果没有余数则不需要再加货车。
2、K == 13:需要考虑货物装13件货物的情况,此时货车的最大满载量应该是12,则使用最少货车数量应该是:货物总量 / 12,且如果货物总量 / 12有余数则还需要再加一辆货车,如果没有余数则不需要再加货车。
3、K > 13:需要考虑货物装13件货物的情况,此时货车的最大满载量就是K,则使用最少货车数量应该是:货物总量 / 货车最大满载量,且如果货物总量 / 货车最大满载量有余数则还需要再加一辆货车,如果没有余数则不需要再加货车,如果该余数刚好是13,则还需要再加一辆车,即将这最后余下的分到两辆车。
参考代码
C语言实现
#include <stdio.h>
int solution(int N, int K) {
int result;
// TODO: 请在此编写代码
if (K < 13) {
result = N / K + (N % K > 0);
} else if (K == 13) {
result = N / 12 + (N % 12 > 0);
} else if (K > 13) {
result = N / K;
if (N % K > 0) {
result += 1;
if (N % K == 13) {
result += 1;
}
}
}
return result;
}
int main() {
int n, k;
while (scanf("%d %d", &n, &k) != EOF)
{
int result;
result = solution(n, k);
printf("%d\n", result);
}
return 0;
}