描述
有一排N棵苹果树。人们说其中一棵会结出金苹果。
我们想部署一定数量的检查员,以便对每棵苹果树进行检查。
每个检查员将被安排在其中一棵树下。为了方便起见,我们给这些树分配从 1 到 N 的编号。部署在i/th树(1≤i≤N)下的检查员将检查编号介于i−D和i+D(含)之间的树。
求实现目标所需的最少检查员人数。
输入描述
N D
输出描述
打印实现目标所需的最少检查员人数。
用例输入 1
6 2
用例输出 1
2
用例输入 2
14 3
用例输出 2
2
用例输入 3
20 4
用例输出 3
3
提示
样本输出 1
例如,我们可以通过在树3和树4下放置检查器来实现目标。
限制因素
- 所有输入值均为整数。
- 1≤N≤20
- 1≤D≤20
解析:
- 输入:从标准输入中读入两个整数 n 和 d,其中 n 表示苹果树的数量,d 表示每个检查员负责检查的树的范围(左右各 d 棵树)。
- 计算:根据题意,实际需要检查的树的范围是 2d+1 棵树,这是因为每个检查员负责检查的范围是编号介于 i-D 和 i+D 之间的树,共 2d+1 棵。
- 计算最少需要的检查员人数:通过 n 除以检查范围得到商和余数,若余数为 0,则商就是最少需要的检查员人数;否则需要再多一个检查员,因为还有余下的树需要检查。
- 输出:将最少需要的检查员人数输出到标准输出流中。
代码:
#include<bits/stdc++.h> // 包含标准的 C++ 标准库的所有头文件
using namespace std; // 使用标准库的命名空间
int n, d; // 声明两个整数变量 n, d
int main()
{
cin >> n >> d; // 从标准输入流中读入两个整数 n 和 d
d = 2 * d + 1; // 计算实际上需要检查的树的范围
if(n % d == 0) cout << n / d << endl; // 如果树的数量能被检查范围整除,则输出最少需要的检查员人数
else cout << n / d + 1 << endl; // 否则输出最少需要的检查员人数(加1表示需要额外的一个人)
return 0; // 返回程序执行成功
}