问题:有一只猴子第一天摘下了若干个桃子,当即吃掉了一半,觉得不过瘾又多吃了一个;
第二天又将剩下的桃子吃掉了一半,还不过瘾又多吃了一个;按照这个吃法,每天都吃掉前一天剩下的一半又多一个。
到了第十天,就剩下了一个桃子 问:这只猴子第一天摘下了多少个桃子
思路:正向循环不行,试试逆向 从最后一天向前推
/*猴子吃桃问题(循环)*/
/*问题:有一只猴子第一天摘下了若干个桃子,当即吃掉了一半,觉得不过瘾又多吃了一个;
第二天又将剩下的桃子吃掉了一半,还不过瘾又多吃了一个;按照这个吃法,每天都吃掉前一天剩下的一半又多一个。
到了第十天,就剩下了一个桃子 问:这只猴子第一天摘下了多少个桃子*/
/*作用:正向循环不行,试试逆向;熟悉变量的声明和使用;掌握循环结构的起始条件和结束条件及使用*/
//循环结构的编写要点: 循环内部结构 开始和结束条件
#include <stdio.h>//头文件
int fun(int n)//定义fun函数 int n 定义整型
{
int t = 1,i;//定义两个整型变量t,i 并对t赋值 t=1 t值为最后一天猴子剩下的一个桃子
for (i = 1;i < n;i++)//for循环 第一个定义i=0 第二个条件i<n 满足此条件则执行下面语句 循环 i自增
{
t = (t + 1) * 2;//最后一天只剩一个桃子 逆向求前一天的桃子 循环最后求出最开始的桃子
}
return t;//fun函数返回t值 即这只猴子第一天摘下的桃子
}
/*若输入n值为5 即在第5天后猴子吃得只剩下一个桃子
第一次 t=2*2=4 i=1
第二次 t=5*2=10 i=2
第三次 t=11*2=22 i=3
第四次 t=23*2=46 i=4 此时跳出循环 故第一天猴子摘下的桃子数为46*/
void main()//主函数
{
int n, t;//定义两个整型变量 n t
printf("请输入猴子在第几天过后吃得只剩下了一个桃子:");//提示 下行输入天数 最开始到只剩下一个桃子经历的天数
scanf_s("%d", &n);//输入n值 即:输入猴子在第几天过后吃得只剩下了一个桃子
t = fun(n);//调用fun函数 赋值t
printf("猴子在第%d天过后吃得只剩下了一个桃子",n);//提示 此处打印从最开始到只剩下一个桃子所经历的天数
printf("第一天所摘下的桃子数为%d个\n ", t);//最终结果 打印结果 将第一个天所摘下的桃子数为多少打印出来
}
//代码解释说明:main函数中开始n保存输入的天数,t变量接收函数的返回值也就是第一天猴子所摘下的桃子树,最后打印输出结果