UVa 11384 (推公式+递归)

题目:

给你1到n,现在让你将每个数变成0,每一步操作可以选取任意数一起减去一个整数,减完了不能为负数!问你最少需要几步?

巨水的题,然而为什么要写博客呢?提醒自己要记得递归函数,不要傻傻的开数组硬比较

公式:f(n)=f(n/2)+1;

代码如下:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int f (long long int n)
 5 {
 6     if (n==1)
 7     return 1;
 8     else
 9     return f(n/2)+1;
10 }
11 int main()
12 {
13     long long int n;
14     while (~scanf("%lld",&n))
15     {
16         printf("%d\n",f(n));
17     }
18     return 0;
19 }

 

posted @ 2016-10-25 09:59  抓不住Jerry的Tom  阅读(206)  评论(0编辑  收藏  举报