在前几周的作业里,同学们在做while类循环作业时,应该有接触过类似倒推的问题。问题内容是和这题一模一样的。
image.png
1054: 猴子吃桃
- 题目描述
悟空第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢? - 输入
输入一个数n(1<=n<=30)。 - 输出
输出第一天的桃子个数。 - 参考代码:
#include<stdio.h>
int main()
{
int i,n,s;
s=1;
scanf("%d",&n);
for(i=n;i>1;i--){
s=(s+1)*2;
}
printf("%d",s);
return 0;
}
- 代码解析:
对于解决倒推问题,我们先从题目入手,弄清已知量分别是什么。
根据题目我们可以知道,最后一天,也就是第n天的时候,悟空的桃子还剩下一个。也就是初始值为1。根据题目,他每天吃掉前一天剩下的一半多一个。反过来说,前一天的桃子,是第二天的多一个的两倍。
那么,我们在计算时,只要我们从第n天往回倒推,每少一天,则把桃子的数量先+1再*2,待天数=1时,就可以知道第一天的桃子个数。
本题在倒推题目中属于较为基础的一种,这里所教的代码只强调逻辑,不强调死记硬背,希望大家以后遇到同样或者类似的题目,能举一反三。灵活运用循环语句完成倒推。
- 本题用while循环也可以完成,如果你可以做到,不妨把你的答案发到留言栏与大家一同分享与学习。
网友评论