给定一个1….n的正整数序列,每次操作可以从序列寻找出一个或多个正整数,然后同时减去一个相同的正整数。
通过画图可以发现只要把后一半都减去n/2就和前一半一样了,所以有递推式 f(n )=f(n/2) + 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
#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; } |
Uva 11384 Help is needed for Dexter
原文:http://www.cnblogs.com/rolight/p/3541379.html