解题思路: 题目分析过程【 我这题卡了好久(捂脸),然后看了大神的题解我才知道,原来我题目分析理解错了(捂脸)】
【当你有解题思路的时候,而且你肯定你的解题思路没问题,那你就应该要怀疑你题目意思是不是分析错了(这是我的经验之谈[ 捂脸 ])】
例如 n=4 ( 解释: day 1 就是 第一天 )
day 0 : 剩下 x 个蟠桃 (一切才刚刚开始,蟠桃还正在准备被吃呢,它就是 桃子的总数 了)
day 1 : 开始 x 个
吃了 x/2+1 个
剩下 x-(x/2+1) == x-x/2-1 == x/2-1 个
day 2 : 开始 x/2-1 个
吃了 ( x/2-1 )/2+1 == x/4-1/2+1 == x/4+1/2 个
剩下 x/2-1-( x/4+1/2) == x/2-1-x/4-1/2 == x/4-3/2 个
day 3 : 开始 x/4-3/2 个
吃了 ( x/4-3/2 )/2+1 == x/8-3/4+1 == x/8+1/4 个
剩下 x/4-3/2-( x/8+1/4 ) == x/4-3/2-xx/8-1/4 == x/8-7/4 个 == 1 个
// 以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子, 说明 第 (n-1) 天 吃完之后,就只剩下 1 个了
day 4 : 开始 1 个 ( 只剩下 一个 了,不吃了 )
我希望通过 每天剩下的蟠桃数 来计算出 一共有几个蟠桃( x==? )
// 因为我也就只知道用了n天,第(n-1)天剩下1个桃子,用每天剩下的桃子数量计算比较容易想,我觉得
那么我们就需要找 每天剩下的桃子数量 的规律了
这时候,我们就可以使用我们小学学到的知识“秒杀”它的规律了 设置一元一次方程 a*x+b==y
前一天剩下的桃子数量y 今天剩下的桃子数量x
day 0 : 剩下 x 个
day 1 : 剩下 x/2-1 个
day 2 : 剩下 x/4-3/2 个
day 3 : 剩下 x/8-7/4 个 == 1 个 ( x/8-7/4 ) *a+b == x/4-3/2 所以 a==2 , b==2
day 4 : 开始 1 个
所以每天剩下桃子数量的规律就是 2*x+2==y ,因为我懒,所以我就想要用一个变量解决,所以就 x=2*x+2 了呀
到这里应该能理解吧,那下面就更加没问题了,因为轻舟已过万重山了啊,后面轻松多了啊
注意啊循环次数,循环 ( n-2 ) 次就够了啊,我在代码那里解释这个东西
注意事项: 输出完一次 总的桃子数量 之后一定一定要换行
参考代码:
#include<stdio.h>
int main ( )
{
int n=0 ;
while ( scanf("%d",&n) !=EOF )
{
int x=1 ;
// 例如n==4 , 这里就是 第三天剩下的桃子数量是 1 个
/*每次开始循环都需要重新赋值啊,不然 下一次循环开始时 系统会认为第(n-1) 天剩下的桃子数量是 上一次循环的结果 */
for ( int i=n-1 ; i>0 ; i-- )
{
x=2*x+2 ;
}
// 例如 n==4 , 那么我就只需要循环 3 次
/* 第一次循环 解决了 第二天 剩下多少桃子的问题
第二次循环 解决了 第一天 剩下多少桃子的问题
第三次循环 解决了 第0天 剩下多少桃子的问题
到这里我们发现问题已经解决了,所以就不需要再循环了 */
printf("%d\n", x ) ;
// 注意啊!!!这里一定要换行,不然C语言网过不了!!!
}
return 0 ;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复