题目链接:点击这里
解题思路
此题最好的做法应该是首先动手算一遍。例如,当N=3时,第一步最好的方法应该是对{2,3}每个数减去2,这样得到的数列为{1,0,1},我们发现这个数列和N=1时的最少操作次数相同。同样,我们验证当N=6时,第一步对{3,4,5}每个数减去3,得到的数列为{1,2,3,0,1,2},与N=3时的最少操作次数相同。因此,我们得到递推关系式:
DN=DN/2+1 D N = D N / 2 + 1
代码示例
#include <iostream>
using namespace std;
int N;
int recursive(int n)
{
if (n == 1) return 1;
else
return recursive(n/2) + 1;
}
int main()
{
while (cin>>N)
{
cout<<recursive(N)<<endl;
}
return 0;
}
欢迎关注我的个人博客。
213

被折叠的 条评论
为什么被折叠?



