思维题,每次第一步操作先取出一半,序列变为1, 2, 3, … , n / 2, 0, 1, 2, 3, … , (n-1)/2
其中0, 1, 2, 3, … , (n-1)/2等价于1, 2, 3, … , n / 2,因此f(n) = f(n/2)+1.
#include <cstdio>
int f(int n) {
return n == 1 ? 1 : f(n/2) + 1;
}
int main(int argc, char const *argv[]) {
int n;
while (scanf("%d", &n) == 1) {
printf("%d\n", f(n));
}
return 0;
}