首页 > 试题广场 >

计算小球走过的路程和反弹高度

[编程题]计算小球走过的路程和反弹高度
  • 热度指数:43425 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一球从 h 米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第 n 次落地时共经过了多少米?第 n 次返弹多高?

输入描述:
输入小球下落的高度和落地的次数(先输入小球初始高度再输入反弹次数)


输出描述:
输出小球第 n 次 落地时经过的距离和第 n 次反弹的高度(保留小数点后1位)
示例1

输入

100 1

输出

100.0 50.0
示例2

输入

100 3

输出

250.0 12.5
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    double s=h;
    int i=1;
    while(n!=i)
    {
     h/=2;
     s+=h*2;
     i++;
    }
    h/=2;
    cout<<fixed<<setprecision(1);
    cout<<s<<" "<<h<<endl;

    return 0;
}
发表于 2022-02-13 21:13:05 回复(0)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // 落地时经过的距离和第 n 次反弹的高度
    double distance = h;
    double height = h;

    while(--n){
        distance += height;
        height /= 2;
    }
    height /= 2;

    cout<< std::fixed << setprecision(1)<< distance << " "<< height << endl;
    return 0;
}

发表于 2022-01-12 17:01:36 回复(2)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    float a = h;
    h/=2;
    while(--n)
    {
        a+=h*2;
        h/=2;
    }
    printf("%.1f %.1f",a,h);
    return 0;
}
发表于 2024-07-11 14:07:06 回复(1)
#include <iostream>
#include <iomanip>
using namespace std;

int pow(int n)
{
    int s = 1;
    for (int i = 1; i <= n; i++)
    {
        s *= 2;
    }
    return s;
}

void pull(double h,int n)
{
    int a = 0;
    double high = 0.0;
    double sum = h;
    for (int i = 1; i <= n; i++)
    {
        a = pow(i);
        sum = sum + high * 2;
        high = h / a;
    }
    cout << fixed << setprecision(1) << sum << " " << high << endl;
}
int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    pull(h, n);
    return 0;
}

发表于 2022-06-17 21:38:11 回复(0)
#include <iostream>
#include <iomanip>
#include<cmath>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    double hnum=0;
    for( int i=1;i<=n;i++)
{
    hnum+=h/pow(2,i-1);
}
     double a=2*hnum-h;
     double b= h/pow(2,n);
    cout<<fixed<<setprecision(1)<<a<<" "<<setprecision(1)<<b;
    
    return 0;
}
用的数学关系,所以用了头文件<camth>;看了其他人的,发现随便弄出来,自己还待学习
发表于 2022-04-01 22:58:25 回复(0)
//
// Created by Sween'e'y on 2025/2/18.
//
#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main() {

      double h;
      int n;
      cin >> h;
      cin >> n;
      double sum = 0, num = 0;
      sum += h;
      h *= 0.5;
      for (int i = 0; i < n - 1; ++i) {
            sum += 2 * h;
            h = h * 0.5;
      }
      printf("%.1f %.1f", sum, h);
      return 0;
}

发表于 2025-02-20 16:10:56 回复(0)
#include <iostream>
#include <iomanip>
#include<cmath>
using namespace std;

int main() {

    double h;
int n;
double s = 0.0;
double j = 0.0;
cin >> h;
cin >> n;
for (int i = 1; i < n; i++) {
    s += h / pow(2, i - 1);
}
s += h;
for (int i = 1; i <= n; i++) {
    j = h / pow(2, i);
}
cout << setiosflags(ios::fixed) << setprecision(1) << s<<" ";
cout << setiosflags(ios::fixed) << setprecision(1) << j << endl;

    return 0;
}
发表于 2025-02-09 15:41:53 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    double sum=0;
    for(int i=1;i<=n;i++){
        sum=sum+h;//加上落地高度
        h=h/2;//弹起高度
        if(i<n){
            sum=sum+h;//加上弹起高度,最后一次落地时不加弹起高度
        }
    }
    cout<<setprecision(4)<<sum<<" "<<h;
    return 0;
}
发表于 2024-12-26 11:15:29 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;
    double s=0,height=h;
    for (int i=1; i<=n; i++) {

    if(i==1) {
    s=h;
    }
    else {
    s=s+height*2;
    }
    height=height/2;
   
    }
    cout.setf(ios::fixed);
    cout<<setprecision(1)<<s<<" "<<height;
    // write your code here......
   

    return 0;
}
发表于 2024-12-04 18:32:05 回复(0)
#include<stdio.h> #include<math.h> int main() { int n,i; double h,item,sum; scanf("%lf %d",&h,&n); sum=h; for(i=1;i<=n-1;i++) { item=h/(pow(2,i-1)); sum=sum+item; } printf("%.2lf %.2lf",sum,h/pow(2,n)); }</math.h></stdio.h>
发表于 2024-11-16 00:21:37 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;
    double sum=0;
    for(int i=1;i<=n;i++)
    {sum=sum+h/2.0+h;
    h=h/2.0;}
    sum=sum-h;
    cout<<fixed<<setprecision(1)<<sum<<" "<<h<<endl;

    // write your code here......
   

    return 0;
}
发表于 2024-11-11 22:36:41 回复(0)
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;
    double route = h;
    double hc = 0;
    double temp = 0;

    cin >> h;
    cin >> n;
    if(n==1){
        route = h;
        hc = h/2;
    }else{
        for(int i=2; i<=n; i++){
            temp = h/pow(2,i-1);
            route = route + temp*2;
            hc = temp/2;
        }
    }
    cout.setf(ios::fixed);
    cout << setprecision(1) << route << " ";
    cout << setprecision(1) << hc << endl;

    // write your code here......

    return 0;
}
发表于 2024-10-31 23:07:31 回复(0)
#include <iostream>
#include <iomanip>
#include<cmath>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;
    double sum=0;

    cin >> h;
    cin >> n;

    // write your code here......
    if(n==1)
    sum=h;
    else
    sum=(h+2*h*(1-pow(0.5,n-1)));
    double H=h/pow(2,n);
    cout<<fixed<<setprecision(1)<<sum<<" "<<H<<endl;

    return 0;
}
发表于 2024-08-16 18:12:30 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;
    double sum = h;
    for(int i = 1;i<=n;i++){
        sum += h*(i == 1? 0:2);
        h =h/2;
    }
    cout << fixed << setprecision(1);
    cout<<sum<<" "<<h;

    return 0;
}
发表于 2024-04-24 22:14:21 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    // write your code here......
    double s = 0 , height = h , cnt = h;//cnt记录原始高度
    for(int i = 1; i<= n; ++i){
        s += 2*h;
        h /= 2;
        height /= 2;
    }
    printf("%.1lf %.1lf",s-cnt,height);//第一次下落是单程

    return 0;
}

发表于 2024-01-31 11:24:41 回复(0)
#include <stdio.h>
#include <math.h>
int main()
{
    int n=0;
    int m=0;
    int h=0;
    scanf("%d %d",&h,&m);//h是下落的高度,m是落地的次数
    float h1=0;//h1代表第n次落地经过的距离
    float h2=0;//h2代表第你次反弹的高度
    h2=h/pow(2,m);
    int i=0;
    float b=0;
    for(i=0;i<m;i++)
    {
         b=h*(1.0/pow(2,i));
         if(b==h)
         {
            h1+=h;
         }
         else
          {
         h1+=2*b;
         }
    }
    printf("%0.1f %0.1f",h1,h2);
}
//给帅哥代码点点赞

发表于 2023-12-31 16:16:51 回复(0)
#include <cmath>
#include <iomanip>
#include <ios>
#include <iostream>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;
    double s = 0.0;// 经过的距离

    cin >> h;
    cin >> n;

    s = h;
    for (int i = 1; i <= n; i++) {
        if (i != 1)
            s += 2 * h;
        h /= 2;
    }
    // fixed指定输出为固定小数位数的形式,然后使用setprecision设置输出的小数位数为1位。
    cout << fixed << setprecision(1) << s << " " << h << endl;

    return 0;
}
编辑于 2023-12-15 00:31:57 回复(0)
x
#include <stdio.h>
int main (){
double height;
int count ;
double sum=0.0;
scanf("%lf %d",&height,&count);
if(count==1){
    printf("%.1f %.1f",height,height/2);
    return 0;
}else if(count >=2){
    sum=sum+height;
for(int i=2;i<=count;++i){
    sum+=height;
    height=height/2;

   
}
}
     printf("%.1f %.1f",sum,height/2);

    return 0;
}
编辑于 2023-12-07 00:57:08 回复(0)
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double fun(int h, int n)
{
    if (n <= 2)
        return n * h;
    else
        return h / pow(2,n-2) + fun(h,n-1);
}

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    cout << fixed << setprecision(1) << fun(h, n) << " " << h / pow(2,n);

    return 0;
}
发表于 2023-10-06 19:54:49 回复(0)
示例2
输入:
100 3
输出:
250.0 12.5
这是不是有问题呀,为啥第二次回弹是100
呢
发表于 2023-09-26 11:29:10 回复(0)