HDU 2013 蟠桃记【递推】【递归】
来源:互联网 发布:武汉人工智能创业公司 编辑:程序博客网 时间:2024/05/22 15:05
蟠桃记
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34406 Accepted Submission(s): 25912
什么问题?他研究的问题是蟠桃一共有多少个!
不过,到最后,他还是没能解决这个难题,呵呵^-^
当时的情况是这样的:
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?
24
422
解题思路:这道题可以用递推来写,也可以用递归来写。
递推解法:设sum为当前桃子数,a为剩余桃子数。
悟空每天都吃掉桃子总数一半多一个 sum - sum/2 - 1 = a => sum = (a+1)*2
当第二天(看做最后一天)的桃子数只剩下1个时, 第一天的总数的为 sum = (1+1)*2 = 4
当第三天(最后一天)的桃子数只剩下1个时,第二天的桃子数为 sum2 = (1+1)*2 = 4,第一天的桃子总数为 sum1= (sum2+1)*2 = (4+1)*2 = 10
由此可得递推关系:sum = (a+1)*2。
我们可以逆着推,从最后一天(剩余一个桃子时的天数)往前推,后一天的桃子数(未吃前)为前一天的桃子剩余量。只需要推n-1天。
#include<stdio.h>//递推 从后往前推 int main(){int n,i,sum;while(~scanf("%d",&n)){sum=1;for(i=n;i>1;i--)sum = (sum+1)*2;printf("%d\n",sum);}return 0;}
递归解法:f(d)函数表示当前桃子数,d表示倒数第几天,当d为倒数第一天,返回1个桃子。否则返回 (f(d-1)+1)*2
当d=3时,表示第一天(倒数第三天),f(3) = (f(3)+1)*2 求f(2) 倒数第二天的桃子数
当d=2时,表示倒数第二天,f(2)=(f(1)+1)*2 ,求f(1)倒数第一天的桃子数。
当d=1时,已知最后一天剩余1个桃子,则f(1) = 1 ; f(2)=(1+1)*2=4 ; f(3)=(4+1)*2=10。
#include<stdio.h>int f(int d){ if(d==1) return 1;//d==1表示最后一天 else return (f(d-1)+1)*2; }int main(){ int n; while(scanf("%d",&n)==1) {printf("%d\n",f(n));} return 0;}
递归2:这种递归与上面那种一样。但是d表示当前天数, 当d= n时,返回1。否则返回 (f(n+1)+1)*2。
从 d = 1 开始,不断往后推,直到求出d = n 时的 f(n) =1。
例如当n = 3,f(3) = 1; 第三天的桃子数为1
f(2)= (f(3)+1)*2 = 4 , 第二天的桃子数为4
f(d=1) = (f( 2) + 1)*2 =10 第一天的桃子数为10
#include<stdio.h>int n;int f(int d){if(d==n) return 1;//递归 如果d为最后一天 则返回 1else return (f(d+1)+1)*2; }int main(){int s;while(scanf("%d",&n)!=EOF){s=f(1);printf("%d\n",s);}return 0;}
- HDU 2013 蟠桃记【递推】【递归】
- 递归递推之蟠桃记
- 递归递推练习 I 蟠桃记
- 递推递归练习I蟠桃记
- 递推递归练习--I(蟠桃记)
- 递推递归--I蟠桃记
- hdu 2013 蟠桃记-递推-[解题报告]C++
- HDU 2013 蟠桃记 (递归+水题)
- ACM递推递归练习I 蟠桃记
- 递归递推练习―I―蟠桃记
- 递推递归练习 I 蟠桃计
- hdu 2013 蟠桃记
- HDU 2013 蟠桃记
- HDU 2013 蟠桃记
- hdu 2013 蟠桃记
- hdu-2013-蟠桃记
- HDU 2013 蟠桃记
- [hdu 2013] 蟠桃记
- 判断是否是中文
- 建立表格示例的SQL表及插入数据语法
- 树堆结构
- 【线性扫描ijk_贪心】candy 最少蛋糕分配、Trapping Rain water
- 三个数求最大数
- HDU 2013 蟠桃记【递推】【递归】
- U-boot的环境变量值得注意的有两个: bootcmd 和bootargs
- VC各种格式转换
- 设计模式实现(十六)---迭代器模式(Iterator)
- servlet
- 串口收发数据时字符、十六进制、二进制格式详细区分
- 合作开发三层架构版机房中的一些工具软件
- 8月风怒
- SQL 忽略大小写模糊查询