Dexteris tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game heplanned for her is quite easy to play but not easy to win at least not for DeeDee. But Dexter does not have time to spend on this silly task, so he wantsyour help.
Therewill be a button, when it will be pushed a random number N will be chosen bycomputer. Then on screen there will be numbers from 1 to N. Dee Dee can chooseany number of numbers from the numbers on the screen, and then she will commandcomputer to subtract a positive number chosen by her (not necessarily onscreen) from the selected numbers. Her objective will be to make all thenumbers 0.
Forexample if N = 3, then on screen there will be 3 numbers on screen: 1, 2, 3.Say she now selects 1 and 2. Commands to subtract 1, then the numbers on thescreen will be: 0, 1, 3. Then she selects 1 and 3 and commands to subtract 1.Now the numbers are 0, 0, 2. Now she subtracts 2 from 2 and all the numbersbecome 0.
Dexteris not so dumb to understand that this can be done very easily, so to make atwist he will give a limit L for each N and surely L will be as minimum aspossible so that it is still possible to win within L moves. But Dexter doesnot have time to think how to determine L for each N, so he asks you to write acode which will take N as input and give L as output.
Input and Output:
Inputconsists of several lines each with N such that 1 ≤ N ≤ 1,000,000,000. Input will be terminated by endof file. For each N output L in separate lines.
SAMPLE INPUT |
OUTPUT FOR SAMPLE INPUT |
1 2 3 |
1 2 2 |
Problemsetter:Md. Mahbubul Hasan
分析:
此题做的时候,如果无从下手的话,先计算一些例子,然后找规律,发现每次处理一半的数据的时候有最小解:即f(n) = f(n / 2) + 1;
代码如下:
#include <cstdio>
int fun(int n)
{
if (n == 1)
{
return 1;
}
return fun(n / 2) + 1;
}
int main()
{
int n;
while (scanf("%d",&n) == 1)
{
printf("%d\n",fun(n));
}
return 0;
}