首页 > 试题广场 >

小球走过路程计算

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

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


输出描述:
输出小球反弹的高度和经过的距离(先输出反弹的高度再输出经过的距离,中间用空格隔开)。
结果保留三位小数,保留方式已经写在预设方法备注中。
示例1

输入

100 3

输出

12.500 250.000
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();
        float sum = -h;
        for (int i = 1; i <= n; i++) {
            sum += 2 * h;
            h /= 2;
        }
        System.out.printf("%.3f %.3f", h, sum);
    }
}

发表于 2021-11-02 16:42:47 回复(3)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        float r=h;//r用来记录总路程,现在表示第一次落地时所走的路程
        float m=0.f;/*m用来记录第n次落地后所弹的高度,
        第n次的路程不记录进总路程*/
        for(int i=0;i<n;i++)//迭代n次
        {
            m=h/2;//记录每次(即第i+1次)反弹后的高度
            r+=h;//记录总路程
            h/=2;//高度更新,每次更新为原来的二分之一
        }
        r-=2*m;//减去第n次反弹后的的路程
        System.out.println(String.format("%.3f",m)+" "
                           +String.format("%.3f",r));
    }
}

发表于 2022-06-26 19:20:39 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
       // 记录第一次小球的初始高度 因为第一次没有弹起的过程,所以总路程要减去他
        float fir = h;
        int n =scanner.nextInt();
        float sum = 0;
        for(int i = 1;i<=n;i++){
            sum += 2*h;
            h=h/2;
        }
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum-fir));
        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        

    }
}
发表于 2021-12-17 15:45:37 回复(2)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

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

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        float retH = 0;
        while(true){
            retH += h;
            h /= 2;
            n--;
            if(n < 1){
                break;
            }
            retH += h;
        }
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", retH));
    }
}

发表于 2024-08-09 17:25:03 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double height = sc.nextDouble();
        int count = sc.nextInt();

        double lucheng = -height;

        for (int i = 0; i < count; i++) {

            lucheng = lucheng + (height * 2);
            height = height / 2;
        
        }

        System.out.println(String.format("%.3f", height) + " " + String.format("%.3f",
                           lucheng));
    }
}

发表于 2023-11-03 21:13:17 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        float count = 0;
        float sum = 0;
        if (n == 1) {
            count = h;
        }
        if (n == 2) {
            count = 2 * h;
        }
        if (n >= 3) {
            count =(float) ((3 - Math.pow(0.5, (n - 2))) * h);
        }

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        sum= (float) (h*(Math.pow(0.5,n)));
        System.out.println(String.format("%.3f", sum)+" "+String.format("%.3f", count));

    }
}
这玩意就是一个从第三项开始的首项为0.5,公比为0.5的等比数列的前N项和
发表于 2021-11-29 22:59:58 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        //100+50+50+25+25
        float sum=h;
        for(int i=1;i<n;i++){
            h=h/2;
            sum=sum+h*2;
        } h=h/2;
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
       

    }
}

发表于 2025-05-17 15:44:03 回复(0)
//write your code here......
        float h0 = h;
        float sum = 0.0F;
        for(int i=0; i<n; i++){
            sum += h;
            h /= 2;
        }
        sum = sum*2 - h0;
        //输出格式为:
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
       
发表于 2025-03-06 15:48:44 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        float sum=h;
        if(n==1){
            h=h/2;
            sum=h;
            System.out.printf("%.3f %.3f",h,sum);
        }else {
            h=h/2;
            for(int i=2;i<=n;i++){
                sum+=2*h;
                h/=2;
            }
            System.out.printf("%.3f %.3f",h,sum);
        }
        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
       

    }
}

发表于 2025-03-02 18:44:20 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        float sum = h;//总共经过多少米
        float h0 = h;//反弹多高
        for (int i=0 ; i<n; i++) {
            sum = sum + 2*h0;
            h0 = h0/2;
        }
        sum = sum -2*h;
        System.out.println(String.format("%.3f", h0)+" "+String.format("%.3f", sum));
    }
}
发表于 2024-11-15 12:54:35 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float h = scanner.nextFloat();
        int n = scanner.nextInt();
        //先加上初始高度
        double sum = h;
        //统计的距离是第n次落后的举例,在次弹起的高度不需要计算进去
        //所以n要先-1,统计完经过距离后在算出n次后弹起的距离
        while (--n != 0) {
            h = h / 2;
            sum = sum + (h * 2);
        }
        h = h / 2;
        System.out.println(String.format("%.3f", h) + " " + String.format("%.3f", sum));

    }
}

发表于 2024-09-30 13:28:00 回复(0)
//一球从h米高度自由落下,每次落地后反弹回原高度的一半再落下,求它在第n次落地时共经过了多少米?第n次反弹多高?
 import java.util.*;

 public class Main
 {
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        float h = sc.nextFloat();
        int  n = sc.nextInt();
        float result1 = 0 ;
        float result2 = 0;
        float tmp = h;

        for(int i = 1; i <= n;i++)
        {
            result1 = h/2;
            h = result1;
            if(i != n)
            {
                result2 +=  result1*2;
            }
        }

        System.out.println(String.format("%.3f",result1)+" "+ String.format("%.3f",result2+tmp));

    }

 }

发表于 2024-09-03 18:13:01 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        float sum = 0;
        while(n != 0){
            //sum加上下降的高度
            sum = sum + h;
            h = h / 2; //小球高度一半
            //求到落地时候,第三次不用加上上升的高度
            if(n != 1){
                //sum加上上升的高度
                 sum = sum + h;
            }
            n--;       //次数减一,控制循环
        }
        //循环结束,h里面放着n次后小球高度,num里面放着经过的距离
        //String.format() ,按固定格式输出字符串形式
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        

    }
}

发表于 2024-07-17 18:33:37 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();

        //write your code here......
        double sum = 0.0;
        for(int i=1;i<=n;i++){
            sum +=Math.pow(0.5,i-2)*h;
        }

    double height = h*Math.pow(0.5,n);

        System.out.println(String.format("%.3f", height)+" "+String.format("%.3f", sum-h));
        
    }
}

发表于 2024-06-03 20:37:58 回复(0)
 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float h = scanner.nextFloat();
        int n = scanner.nextInt();

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

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        double sum = 0;
        for (int i = 0; i < n; i++) {//一次计算  下去和上来的
            sum += h;//加上下去的
            h /= 2;
            sum += h;//加上回来的
        }
        System.out.println(String.format("%.3f", h) +  " " +  String.format("%.3f",
                           sum - h));//但是题目应该是不要第n次反弹回来的距离 所以把第n次反弹的h减去即可
发表于 2024-06-02 10:35:05 回复(0)
  for(i=1;i<=n;i++){
            if(i==1)sum=sum+h;
          h= (float) (h*0.5);
            if(i<=n-1) sum=sum+2*h;
        }

        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));

编辑于 2024-03-24 20:49:03 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float h = scanner.nextFloat();
        int n = scanner.nextInt();

        //write your code here......
        float sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i == 1 ? h : 2 * h;
            h /= 2;
        }

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        System.out.println(String.format("%.3f", h) + " " + String.format("%.3f", sum));

    }
}
注:本题的格式化输出实际有两种方式:
方式一:
System.out.println(String.format("%.3f", h) + " " + String.format("%.3f", sum));
方式二:
System.out.printf("%.3f %.3f\n", h, sum);
发表于 2024-03-18 12:05:17 回复(0)
float height=h/(int)Math.pow(2,n);
float distance=3*h-4*height;
无需循环,数学方法计算。
发表于 2024-03-04 13:30:08 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();
        double rou=0.5;
        double sum=h;
        //write your code here......
        double re_h=pow(rou,n);
        for (int i=1;i<n;i++){
            sum=sum+2*h*pow(rou,i);
        }
        System.out.println(String.format("%.3f", h*re_h)+" "+String.format("%.3f", sum));
       

    }
    public static double pow(double rou,int n) {
        double res=1.0;
        if (n==0) return res;
        else{
            for (int i=1;i<=n;i++){
            res=res*rou;
                }
        }
        return res;
    }
}

发表于 2024-02-21 04:10:34 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float h = scanner.nextFloat();
        int n = scanner.nextInt();

        //write your code here......
        float temp = h;
        float sum = 0;
        float x = 0;
        h = (float)(h / Math.pow(2, n));
        if (n == 1) {
            sum = temp;
        }
        if (n > 2) {
            sum=temp;
            for (int i = 2; i <= n; i++) {
                x = (float)((temp / Math.pow(2, i - 1)) * 2);
                sum += x;


            }
        }

        //输出格式为:System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
        System.out.println(String.format("%.3f", h) + " " + String.format("%.3f", sum));

    }
}

发表于 2023-11-17 20:22:31 回复(0)