c++每日一题——小球落地

c++每日一题——小球落地

c++每日一题——小球落地

今天来写一道小球落地题‘ - ’

题目如下:

小球从某一高度落下,每次落地后反跳回原来高度的一半,再落下。

输入弹球的初始高度 M 和回弹次数 N, 输出弹球第 N 次回弹后的高度 和达到该高度后所经过的距离(保留两位小数)

(0

样例输入:

1000 5

样例输出

31.25

2906.25怎么说,因为一开始小球每次落地后反跳回原来高度的一半,再落下。自己没有注意到“再落下”,所以定义的'h'(小球之后的高度,开始高度是M,写int h = M,为了之后好计算)没乘以2,小球要回到地面上,你不能让它悬在空中吧。牛顿听了都炸了

但是我想的是再定义个数组double a[2],避免了函数返回值 (return)只能返回一个值的情况。

先看下一下,一开始的写法:

#include

using namespace std;

double leng(double M,int N,double a[2]);

int main(){

double M;int N;

cin>>M>>N;

double a[2];

leng(M,N,a);

cout<

cout<

return 0;

}

double leng(double M,int N,double a[2]){

int h = M;

int count = 1;

M /= 2.0;

count += 1;

if(N==1){

a[0] = h/2.0;

a[1] = h + h/2.0;

return 0;

}

else if(N>0){

a[0] = M;

a[1] = M + h;

}

else return 0;

}

很明显,对于 N>1 的情况,自己的计算逻辑不完整,没有考虑多次反弹的累积距离(大头😒)。而且你看函数返回类型是 double,却没有返回任何有意义的值(最后只是返回 0)6!。

int count = 1;

你要干嘛?回弹次数 N 有啊!删掉,要的是定义一个输入距离的double distance变量!

所以我应该去使用循环正确计算每次反弹后的高度和总距离。要注意(距离计算逻辑:第一次只有下落距离,之后每次反弹都要加上升和下落距离(除了最后一次反弹只加下落距离))。嗯!嗯?:

#include

#include

using namespace std;

void leng(double M,int N,double a[2]);

int main(){

double M;

int N;

cin>>M>>N;

double a[2];

leng(M,N,a);

printf("%.2lf\n",a[0]);

printf("%.2lf",a[1]);

return 0;

}

void leng(double M,int N,double a[2]){

double height = M;

double distance = 0;

distance += height; // 第一次下落

int i;

for(i=1;i<=N;i++){

height /= 2.0;

if(i != N){ // 反弹后上升的距离,最后一次反弹后不需要再加上升距离

distance += 2*height;

}else{

distance += height; // 最后一次只加下落距离

}

}

a[0] = height;

a[1] = distance;

}

distance += height; // 第一次下落

这步很重要,不加开始高度都没加,比如样例输入的: 1000,不加最后结果为1906.25,发现不对劲了吧🤣

因为要小数后两位所以我用的c语言写法:

#include

这是c标准的头文件,外加输出写法,c++可以兼容的:

printf("%.2lf\n",a[0]);

printf("%.2lf",a[1]);

你要写C++写法也行:

cout << fixed << setprecision(2) << a[0] << endl;

cout << fixed << setprecision(2) << a[1] << endl;

我将函数改为 void 类型,因为它通过数组参数返回结果void leng()。而不是用double leng();

可以看到案例的详细运行过程:

初始高度:1000:

第一次反弹高度:500,总距离:1000 + 500*2 = 2000

第二次反弹高度:250,总距离:2000 + 250*2 = 2500

第三次反弹高度:125,总距离:2500 + 125*2 = 2750

第四次反弹高度:62.5,总距离:2750 + 62.5*2 = 2875

第五次反弹高度:31.25,总距离:2875 + 31.25 = 2906.25

嗯,为什么要乘以2呢,好难猜啊?我一开始写的有啊,往上翻翻。

好了,有关这一题的分享就到这里了,再见了!

提示 订阅专刊 全部评论 推荐最新楼层 暂无评论,快来抢首评~

相关推荐

07-16 11:49 中山大学 射频工程师 26届小鹏秋招提前批一面 本人半导体器件物理背景,混合一些光电类背景勇闯26秋招提前批第一个面试的居然是小鹏的自动驾驶类面试官很客气,会根据你的背景提问,哪怕你的背景和自动驾驶一点都不搭本人面试的心理活动就是:自动驾驶我啥都不会啊啊啊啊,有没有我能干的东西啊啊啊最终的结论是建议我认真考虑一下是否要从事这个方向估计肯定没戏了,等待被拒... 小鹏汽车一面43人在聊 点赞 评论 收藏 分享 07-17 09:30 门头沟学院 客户端其它 卷王的风气还是吹到了实习 先说结论:实习一段足矣。先搞明白,实习的意思:https://www.nowcoder.com/share/jump/4888395581752680627633我真是没想到,现在互联网竟然在卷实习有几段这件事,有什么意义,你在这家公司干几天,换家公司干几天,咋啦,你学到啥了,简历上写几家公司的实习经历,你怎么写,写打杂,写端茶倒水,还是写配环境、看文档,没意义啊,好的实习一段就够了。什么是好的实习,包括但不局限于以下:能接触到项目代码有小需求可以做,需求做完会让你整理,然后进行汇报好的导师,在你遇到困难的时候,及时出现,给予你思路良好的团队氛围就这么一场这样的实习足够了,首先,你将会收获良好... 爱睡觉的冰箱哥:是这样,实习一两段达到过简历关门槛,加上把简历玩具项目替换掉,实习的目的就达成了一大半 26届的你们有几段实习? 点赞 评论 收藏 分享 07-09 23:08 南昌大学 Java 27届找日常实习全是已读不回 27届毕业目前想找日常实习,boss全是已读不会,目前官网字节和网易简历直接挂了,其他没消息,连KPI面试机会都没给,真心求友友们给简历提提建议😭 忘川氏第一镜流:去b站找你们学校的优雅✌️ 投递网易等公司8个岗位 点赞 评论 收藏 分享 06-07 19:59 门头沟学院 C++ 求大佬拷打简历 27届菜鸡也想要暑期实习 补药卡我啊😭:都快15年前的了还在11新特性 你的简历改到第几版了 点赞 评论 收藏 分享 不愿透露姓名的神秘牛友 07-16 12:23 被腾讯耍了 昨天通知两天后面试,今天hr打电话说由于架构调整,岗位取消了会释放我的简历,其他部门需要会捞... 投递腾讯等公司7个岗位 点赞 评论 收藏 分享 评论 点赞成功,聊一聊 >1 收藏 分享 评论