UVa 11384 - Help is needed for Dexter

  将[1, n]从中间分成[1, n/2] 和[n/2+1, n]两个部分,分别包含n/2和(n+1)/2个数,将第二部分的数分别减去n/2+1, 第二部分变为[0, (n-1)/2], 第一部分包括第二部分,可得递推公式为:f(n) = f(n/2) + 1; 代码如下:  

  

View Code
 1 #include <cstdio>
 2 
 3 int f(int n)
 4 {
 5     return n == 1 ? 1 : f(n/2)+1;
 6 }
 7 
 8 int main()
 9 {
10     int n;
11     while(scanf("%d", &n) != EOF)
12         printf("%d\n", f(n));
13     return 0;
14 }

 

 

posted @ 2013-04-09 18:32  xiaobaibuhei  阅读(160)  评论(0)    收藏  举报