万世不竭
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
古人云:一尺之棰,日折其半,万世不竭。意思是说一尺长的短木棍,每天将其折成两半,那么一万年也折不完。说的非常有道理,但是如果我们设置一个最小单位的话,比如木棍小于 4cm 就视为不存在的,是可以折完的。但是我们需要折多少次,才能把一根木棍折完呢?
一根为长为奇数 l 的木棍折半为 l/2,l/2+1。
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据,输入 1 行,包含 1 个整数 n (4 <= n <= 10^6),代表木棍长度。
Output
对于每组数据,输出一行,表示需要折多少次才能将木棍折完。
Example Input
12
Example Output
3
Hint
示例解释:
12 -> 6,6
6 -> 3,3
6 -> 3,3
Author
【2016级《程序设计基础(B)II》期末上机考试-第二场】Johsnows
#include <stdio.h> #include <stdlib.h> int ff(long long int n) { if(n < 4) return 0; if(n % 2 == 0) return ff(n/2) + ff(n/2) + 1; else return ff(n/2+1) + ff(n/2) + 1; } int main() { long long int n,sum; while(scanf("%lld",&n) != EOF) { sum = ff(n); printf("%d\n",sum); } return 0; }