解题思路: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.0分

6 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

ccc 1年前 回复TA
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哪有问题?
Lawmingway 1年前 回复TA
#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;
}
那咕 3年前 回复TA
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);
Jz 3年前 回复TA
#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;
}