解题思路以及注意事项:

  1. 用for()循环来模拟反弹的过程,注意不要忘了最后的反弹反弹高度以及开始落下的距离,其他的中间过程都是两倍的反弹高度。

  2. 注意不要弄错了scanf()里面的格式。

  3. 可以用double进行下强制转换。

实例代码:

#include"stdio.h"
int main()
{
    int size,i;
    double iterm=0,sum=0,high;                   //一定要初始化,不然后果不堪设想                             
    scanf("%lf %d",&high,&size);
    iterm=high;
    for(i=0;i<size;i++)                          //循环的开始和结束注意一下
    {
        if(i==0)                                 //加上最后的反弹
            sum+=iterm;                                
        else sum+=2*iterm;                       //中间过程
         iterm=(double)iterm/2;                  //强制转换,下次反弹前面的二分之一
    }
    printf("%0.2lf %0.2lf",iterm,sum);           //注意格式别错了
    return 0;
}

还有什么不懂的问题大家可以在下方的评论区提问,小方会为您解答

点赞(20)
 

0.0分

55 人评分

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

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

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

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

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

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

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

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

评论列表 共有 104 条评论

sy莳苼 5年前 回复TA
@sy莳苼 哦,好吧,,谢谢
逆天改命 5年前 回复TA
@逆天改命 发现问题了,还是逻辑错误,正确的放在下面#include<stdio.h> int main() {     float  M,N,a=0,sum=0;     int i;     scanf("%f %f",&M,&N);     for(i=0;i<N;i++){        sum=sum+a+M;        a=M/2;        M=M/2;     }     printf("%.2f %.2f\n",a,sum);     return 0; }
逆天改命 5年前 回复TA
@sy莳苼 没说高度吧,你这是把初始高度设置为1000了,初始高度应该是输入M,你都没用
逆天改命 5年前 回复TA
#include<stdio.h>
int main()
{
    float  M,N,a,i,sum=0;
    scanf("%f%f", &M, &N);
    for(i=1;i<=N;i++){
       a=M/2;
       sum=sum+a+M;
       M=M/2;
    }
    printf("%.2f %.2f\n",a,sum);
    return 0;
}
显示答案错误,我觉得逻辑没错
sy莳苼 5年前 回复TA
#include <stdio.h>

int main()
{
	double M,N,i,h1=500.0,h2=1000.0,c;
	scanf("%lf",&M);
	scanf("%lf",&N);
	for(i=2;i<=N;i++)
	{
	    c=h1;
		h1=h1/2;
		h2=h2+c*2.0;
	}
	printf("%0.2lf %0.2lf",h1,h2);
	return 0;
}

不知道哪错了,,,是不是5以后 的运算不是这样了?,我算了5以前的运算都对了啊
sy莳苼 5年前 回复TA
#include <stdio.h>

int main()
{
	double M,N,i,h1=500.0,h2=1000.0,c;
	scanf("%lf",&M);
	scanf("%lf",&N);
	for(i=2;i<=N;i++)
	{
	    c=h1;
		h1=h1/2;
		h2=h2+c*2.0;
	}
	printf("%0.2lf %0.2lf",h1,h2);
	return 0;
}
不知道错哪。。。算了前5个的结果都是对的啊
5049 5年前 回复TA
@5049 我明白了,我多算了最后一段上升高度
5049 5年前 回复TA
#include<stdio.h>
int main()
{
    double M;
	int N;
    double sum=0;
    scanf("%lf %d",&M,&N);
    while(N--)
	{
        M=M/2;
        sum=sum+3*M;
    }
    printf("%.2lf %.2lf",M,sum);
    return 0;
}
有人能给我看下嘛,谢谢~
carlt 5年前 回复TA
i==0怎么是最后一次反弹呢,应该是输入的高度啊
北辰 5年前 回复TA
/* Note:Your choice is C IDE */
#include "stdio.h"
#include <math.h>
void main()
{
    double M,N,a=0,b=0,c=0,i;
    scanf("%lf  %lf",&M,&N);
    for(i=0;i<N;i++)
    {
    	a=M/pow(2,N);
    	b=2*M-(4*1000/pow(2,N));
    	c=M+b;
    }
    printf("%.2lf %.2lf",a,c);
    return 0;
}
答案错误50%,错在哪?