给定一个1….n的正整数序列,每次操作可以从序列寻找出一个或多个正整数,然后同时减去一个相同的正整数。
通过画图可以发现只要把后一半都减去n/2就和前一半一样了,所以有递推式 f(n )=f(n/2) + 1
#include <cstdio>
using namespace std;
int f(int n) {
return n == 1 ? 1 : f(n >> 1) + 1;
}
int main() {
int n;
while(~scanf("%d",&n)) {
printf("%d\n",f(n));
}
return 0;
}