题意:
给一个数n, 求最少操作数,使得1-n全变0,一次操作可去多个连续整数同时减去某值
思路:
取中位数以后的数减去中位数,剩下的数都小于等于中位数,则需操作数最多的即剩下的做大值,即f(n)=f(n/2)+1;
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int f(int s) {
if(s == 1) return 1;
return f(s/2)+1;
}
int main() {
while(scanf("%d", &n)!=EOF) {
printf("%d\n", f(n));
}
return 0;
}