解题思路:1.首先心里有个大致的此题描述的大致过程(或者可以画个图)。
2.然后我的思路可能想复杂了(有好的可以留在评论区里嗷)
3.代码中有一些注释掉的"printf",这个是当时在检测过程中用到的。
4.设置三个变量:"dis_before"保留前一次反弹的高度,"dis1"为此次反弹的高度 ,"dis"为总距离。
5.反弹的第一次和后面几次作了区分(体现在"if-else"语句中),而"else"语句中是对输入反弹几次做出的区分。
6.后面的感兴趣的看一下注释吧,感觉这样说不好对照(就好像补丁,哈哈)。
注意事项:1.一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。共经过多少米?此处的距离是落地不反弹的距离(我说咋一直不对劲)。
2.注意变量类型(我也没去试不同变量的相加和相减,就直接用类型转换的方式做了)。
3.这个题目花了好长时间,还是能力不够吧,希望下次理清逻辑在开始(给自己的notice)
参考代码:
#include <stdio.h> int main(void) { int n,i; float m,dis1,dis,dis_before;//从m米高度自由下落 ,第n次落地 scanf("%f%d",&m,&n); dis1=m; dis=m; dis_before=0; for(i=1;i<=n;i++)//对于反弹次数的数据 { dis_before=dis1;//定义初始变量为0,并在每次保留上一次的反弹高度 dis1=dis1/2;//反弹后高度折半 if(i==1)//如果是第一次下落,就没什么好说了,直接是初始高度 dis=dis; else { //printf("%.2f %.2f %.2f\n",dis1,dis,dis_before); if(n==1) dis=dis; else dis=dis+dis_before*2;//画图的话会清晰一些,就是上次的反弹乘2 } //printf("%.2f %.2f %.2f\n",dis1,dis,dis_before); } printf("%.2f %.2f",dis1,dis);//后面保留两位小数 return 0; }
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复