被一道红题掠爆了。。。
- 红绿灯风采
-
正解:分析
基础情况:
当 n=1 时,不需要切割,因为蛋糕已经是一份。
当 n=2 时,只需一刀即可将蛋糕切成两半。
递归思考:
如果我们有一个圆,一刀可以将其分成两个半圆,即两份。
如果我们需要更多份,我们可以先将其切成两份,然后递归地对其中一份继续进行切割。
数学推导:
对于 n 份蛋糕,我们需要通过最少的切割次数 k 实现。
每次切割都会将当前已有的份数翻倍(因为每次切一刀,圆就被分成了两份)。
假设初始有一个圆,经过 k 刀后,我们可以得到 2k
个部分。
目标是找到最小的 k,使得 2k≥n。
解决方案
我们需要找到最小的 k,使得 2k≥n。
使用对数可以简化这个计算:k=⌈log2(n)⌉。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin >> t;
while(t --)
{
cin>>n;
if(n==1)cout << 0 << endl;
else cout<<(n+1)/2<<endl;
}
return 0;
}