# 蓝桥杯Candy Store
问题描述
经营一家糖果店是非常困难的,你需要优化各种各样的东西。最近你在销售一种非常时髦的糖果,叫做Whizboppers。这种糖果变质非常迅速,所以:
·你必须每天早上从供应商买来新的Whizboppers。
·你必须用当天早上从供应商买来的盒子装着糖果出售。
你可以从你的供应商处买来装有任意整数克糖果的盒子。
每天有至多k位顾客到你的店里来。从第1个人开始,每个人会选择花费整数分的钱来买Whizboppers,钱数在1分到C分之间(包含1分和C分)。你打算以1分钱每克的价格出售;所以如果一个人想要花4分钱,你会给他恰好4克糖果。你可以给他1个4克的盒子,也可能是1个2克的盒子和2个1克的盒子。
你最少需要买几个盒子才能保证,不管每个人想花多少钱买糖,你总是可以给他们对应质量的糖果?
注意:当一个人选择自己想买多少糖果后,你知道之前的人已经买了多少糖,但不能预知之后的人打算买多少糖。
举个例子,如果每天至多有2位顾客到你的店里,每个人至多花2分钱(k=2,C=2),你可以从你的供应商买4个1克的盒子。但是你可以做的更好:只要买2个1克的盒子和1个2克的盒子,就可以满足你的顾客。如下所示:
第一个人给第一个人的盒子第二个人给第二个人的盒子2分1 个 2克2分
1分2 个 1克
1 个 1克1分1 个 1克2分
1分1 个 2克
1 个 1克
不论第一个人怎么买,你都可以给他对应质量的盒子,同时保证第二个人也能拿到正确质量的糖果。所以对于k=2,C=2,你用3个盒子就可以满足任意的顾客需求。
输入格式
第一行一个整数T,表示询问数量。
接下来T行,每行包含两个整数k和C,分别表示最大人数和每个人花费的最多钱数。
输出格式
对于每一个询问,输出一行包含"Case #x: y",x是询问编号(从1开始标号),y是你每天最少需要的盒子数量。
以下程序实现了这一功能,请你填补空白处的内容:
```cpp
#include
#include
using namespace std;
int main()
{
int n, k, count = 1;
long long c;
cin >> n;
while (n--)
{
cin >> k >> c;
int num = k;
long long sum = k;
for (long long i = 2; i <= c; i = sum / k + 1)
{
int t = num;
________________
}
cout << "Case #" << count++ <<": " << num << endl;
}
return 0;
}
```
## template
```cpp
#include
#include
using namespace std;
int main()
{
int n, k, count = 1;
long long c;
cin >> n;
while (n--)
{
cin >> k >> c;
int num = k;
long long sum = k;
for (long long i = 2; i <= c; i = sum / k + 1)
{
int t = num;
num += ceil((k * i - sum) * 1.0 / i);
sum += i * (num - t);
}
cout << "Case #" << count++ <<": " << num << endl;
}
return 0;
}
```
## 答案
```cpp
num += ceil((k * i - sum) * 1.0 / i);
sum += i * (num - t);
```
## 选项
### A
```cpp
num += ceil((k * i - sum) * 1.0 / i);
sum += i * (num + t);
```
### B
```cpp
num += ceil((k - sum) * 1.0 / i);
sum += i * (num - t);
```
### C
```cpp
num += ceil((k * (i - sum)) * 1.0 / i);
sum += i * (num + t);
```