给定正整数n,你的任务是用最少的操作次数把序列1, 2, 3 ... n 中的所有数都变为0。 每次操作可以从序列中选择一个或多个整数,同时减去一个相同的正整数。比如,1,2,3可以把2和3同时减小2,得到1,0,1.
【输入格式】
输入包含多组数据。每组仅一行,为正整数n(n <= 10^9)。输入结束标志为文件结束符(EOF)。
【输出格式】
对于每组数据,输出最少操作次数。
【题解】
每次减去(n/2+1)。这样剩下的一部分就是0~n/2范围内,就这样一直递归,
所递归的次数即为操作次数
【代码】
#include <cstdio>
int f(int n){
return n == 1 ? 1 : f(n/2)+1;
}
int main(){
int n;
while(scanf_s("%d", &n) == 1 )
printf("%d\n", f(n));
return 0;
}