原题链接:[编程入门]自由下落的距离计算
解题思路: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
int main() { double num = 0; double a, M; int N,i; scanf("%lf,%d",&M, &N); for (i = 1;N >= i ;i++) { M = (double)M / 2; a = (double)M * 3; num = a + num; } printf("%.2f %.2f",M,num); return 0; } 距离unm哪有问题?#include<stdio.h> int main() { float m,n,a,sum=0; scanf("%f%f",&m,&n); a=m; for(int i=0;i<n;i++){ sum+=m; m*=0.5; } printf("%.2f ",m); printf("%.2f",sum*2-a); return 0; }float m,n;float a,b=0; scanf("%f %f",&m,&n); int i; for(i=0;i<n,i++) { a=m/2; b=b+m+a; m=a; } b=b-a; printf("%.2f %.2f",a,b);#include<stdio.h> int main(){ double a,b,c,M,N; scanf("%lf%lf",&M,&N); a=b=c=0; for(int i=1;i<=N;i++){ if(i==N){ b=b+a; a=M/2; }else{ a=M/2; b=a+b+M; M=a; } } printf("%.2lf %.2lf",a,b); return 0; }