Uva 11384 Help is needed for Dexter

给定一个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;
}
posted @ 2014-02-09 13:12  acm_roll  阅读(198)  评论(0编辑  收藏  举报