【题解】P7573
前言:一道大水难题!
题意
给出 \(n\),要用最小的刀数将蛋糕分成相等的 \(n\) 份(一份中可以包含多块)。
注意:每次切蛋糕时只能沿着直径切下。
思路
- \(n=1\) 时答案为 \(0\)。
- 切一刀多 \(2\) 块,则当 \(n\) 形如 \(2k\) 时至少切 \(k\) 刀;
- 当 \(n=2k+1\) 时切 \(k\) 刀不够,至少切 \(k+1\) 刀
代码
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
int t, n;
signed main()
{
scanf("%lld", &t);
while (t--)
{
scanf("%lld", &n);
if (n == 1)
{
printf("0\n");
}
else
{
printf("%lld\n", (n + 1) >> 1);
}
}
return 0;
}