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 }