首页 > 试题广场 >

小球自由落体

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

数据范围:

输入描述:
一行,一个整数n (1<=n<=10)。


输出描述:
输出两个浮点数ans1,ans2。ans1为第n次落地时,共经过的距离;ans2为第n次反弹的高度。答案应与标准答案误差小于1e-5。两个数间以空格相间。
示例1

输入

1

输出

100.000000 50.000000
示例2

输入

10

输出

299.609375 0.097656
int main()
{
    int n;
    double ans1 = 100, ans2 = 100;
    scanf("%d", &n);
     
    for(int i = 0;i < n - 1;i++)
    {
        ans2 *= 0.5;
        ans1 += ans2 * 2;
    }
    ans2 *= 0.5;
    printf("%lf %lf", ans1, ans2);
    return 0;
}

发表于 2020-02-07 11:23:00 回复(0)
import java.util.Scanner;

public class Main{
    public static void main(String[] src){
        float high = 100.0f;
        float sum = 0.0f;
        Scanner scan = new Scanner(System.in);
        
        if(scan.hasNextInt()){
            int time = scan.nextInt();
            sum = 100;
            high = 50;
            for(int i = 1; i < time; i++){
                sum += (high * 2);
                high = high / 2;
            }
            System.out.println(sum + " " + high);
        }
    }
}


发表于 2020-03-12 14:19:58 回复(0)
n = int(input())

d = 100 * (3 - 0.5 ** (n - 2))
h = 100 * 0.5 ** n
print(d, h)

发表于 2020-08-01 20:04:38 回复(0)
public class Test{ Double height=100d; Double rebound=0d; Double init_lenght=100d; int n=10; for(int i=0;i
发表于 2020-02-06 16:50:18 回复(0)
很显然,第n次反弹的高度为100/2^n,对于总路径而言,只有第一次落地100是单程,第二次落地增加了两个50,第三次落地增加两个25,……。如此一来,就很容易通过等比数列的求和公式求出前n项和的通项
n = int(input())
print(f"%.6f %.6f" % (100 + 50*(1 - 1/(2**(n - 1))) * 4, 100 / 2**n))

编辑于 2021-10-06 15:15:31 回复(0)
JavaScript(Node) 😎题目:4399👾-物理题小球自由落体
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line', line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let n = +inArr[0]
        let h =100
        let f =200
        let sum = 100
        for(let i =1;i<n;i++){
            sum  += f/2
            f = f/2
        }
        for(let i =0;i<n;i++){
            h = h/2
        }
        console.log(sum.toFixed(6))
        console.log(h.toFixed(6))


    }
})
发表于 2020-03-09 15:17:16 回复(0)

#include <iostream>
using namespace std;
 
int main(){
    int n;
    while(cin>>n){
        float ans1=100, ans2=0, h=100;
        for(int i=1; i<=n; i++){
            ans1 = ans1 + ans2*2;
            ans2 = h/2;
            h /= 2;
        }
        cout.setf(ios::fixed);
        cout.precision(6);
        cout.setf(ios::right);
        cout << ans1 << " " << ans2;
    }
    return 0;
}

发表于 2020-03-02 14:10:04 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int a = in.nextInt();
        float ansSum = 100f;
        float ansHeight = 50f;

        for(int i = 1; i < a; i++){
            ansSum += ansHeight * 2f;
            ansHeight = ansHeight / 2f;
        }

        System.out.printf("%.6f %.6f",ansSum,ansHeight);
    }
}

发表于 2024-03-09 04:42:27 回复(0)

)

func main(){
	fmt.Println("请输入一个数")
	var n int
	fmt.Scanf("%v",&n)
	Conclute(n)
}

func Conclute(n int ){
	var ans1,ans2 float32
	ans1,ans2 = 100,50
	if n == 1{
		fmt.Println(ans1,ans2)
		return
	}else{
		for i := 1;i<n;i++{
			ans1 += 2*ans2
			ans2 = ans2/2
		}
	}
	fmt.Printf("%v %v",ans1,ans2)

}

// Golang,精度有问题ans2老是多两位不太会调等我研究下
发表于 2022-09-07 16:49:42 回复(0)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int n;
    cin >> n;
    double sum = 100;
    double len = 50;

    for(int i = n; i > 1; i--)
    {
        sum += len*2;
        len = len/2;
    }
    cout << fixed << setprecision(6) << sum << " " << len << endl;

    return 0;
}

这个精度emmm我也是醉啦

发表于 2022-08-18 15:13:18 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        float height = 100.0f;
        float sum = 0.0f;
        for (int i = 0; i < n; i++) {
            sum += 2 * height;
            height = height / 2;
        }

        System.out.printf("%.6f %.6f", sum - 100, height);
    }
}
发表于 2022-08-17 23:24:58 回复(0)
using System;
class A
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        double height = 100.0;
        double ans1 = 0.0;
        double ans2 = height;
        for(int i = 0;i<n;i++)
        {
            ans1 += ans2;
            ans2 = ans2/2.0;
            if(i != n-1)
            {
                ans1 +=ans2;
            }
        }
        Console.WriteLine($"{ans1} {ans2}");
    }
}
float精度不够
发表于 2022-05-26 14:40:25 回复(0)
#include<stdio.h>
int main(){
    int n = 0;
    double ans1 = 0,ans2 = 100;
    scanf("%d",&n); 
    while(n>1)
    {
        ans2 *=0.5;
        ans1 +=(ans2*2); 
        n--;
    }
    ans1+=100;
    ans2*=0.5;
    printf("%lf %lf",ans1,ans2);
}
发表于 2022-03-02 21:47:09 回复(0)
a = int(input())
h =100 for i in range(a):  h = h/2 print(a,h)

发表于 2021-08-25 13:13:29 回复(0)
var a=readline();
var val=0.5;
var data=[];
var sum=0;
var count=0;
if(a-1>0 && a!=2){
    for(var i=1;i < a-1;i++){
    val=val*0.5;
    var z=100*val;
    data.push(z);
    };
    for(var j=0;j<data.length;j++){
        sum+=data[j];
    };
    count=sum*2+100+100;     
}else if(a==2){
    z=100*0.5;
    count=z*2+100;
 }else{
    z=100;
    count=100;
        };
print(count,z*0.5);

发表于 2021-03-13 15:00:29 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        double[] ans=test(n);
        System.out.println(ans[0]+" "+ans[1]);
    }
    public static double [] test(int n){
        double ans[]=new double[2];
        ans[0]=100;
        double temp=100;
        int i=n;
        while (n>=1&&n<=10){
            if (i!=n){
                ans[0]+=(temp*2);
            }
            temp/=2;
            ans[1]=temp;
            n--;
        }
        return ans;
    }
}
发表于 2020-10-23 00:12:58 回复(0)
#include<stdio.h>
float alldistance(int m,int q);
int main ()
{
    int n=0;
    float x=0,y=0;
    scanf("%d",&n);
    x=alldistance(n,0);
    y=alldistance(n,1);
    printf("%f %f",x,y);
}
float alldistance(int m,int q)
{
    float a=0,c=0;
    for(int i=1;i<m+1;i++)
    {  
        if(i==1)
        {
            c=((float)25)/(0.5);
            a=100;
        }
        else
        {
        c=c/2;
        a=a+c*2*2;
        }
      
    }
    if(q==0)
    {
        return(a);
    }
    if(q==1)
    {
        return(c);
    }
}

发表于 2020-10-13 21:47:05 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int a = s.nextInt();
        float sum=0;
        float total=0;
        float high=100;
        for(int j=1;j<=a;j++) {
            if (j == 1) {
                total = total + high;
                high = high / 2;
            } else {
                total = total + 2*high;
                high = high / 2;
                sum = sum + total;
            }
        }
        java.text.DecimalFormat df = new java.text.DecimalFormat(".000000");
        System.out.println(df.format(total));

       // System.out.println("sum"+sum);
        System.out.println(df.format(high));


    }
}


发表于 2020-09-12 13:42:56 回复(0)
搞不懂为啥我会错,输入写死了试过是错的,输入自己输入还是错?为啥呢?
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		   //输入
	    int n;
	    for(;;) {
	    Scanner input = new Scanner(System.in);
	    n = input.nextInt();
	    float h =100;
	    float ans1=100;
	    float ans2=0;
	    for(int i=0;i<n;i++){
	         
	        h =h / 2;
	        ans1 = ans1+2 * h;
	    }
	    ans2 = h;
	        ans1 = ans1 - 2*h;
	    System.out.printf("%.6f,%.6f",ans1,ans2);
	    }

	}

}


发表于 2020-08-18 10:28:17 回复(0)
#include <iostream>
(720)#include <iomanip>
using namespace std;
int main(){
    int n=0;
    double ans1=0.0,ans2=0.0;
    cin>>n;
    double height=100.0;
    for(int i=0;i<n;i++){
        ans1+=height*2;
        height/=2;
        ans2=height;
    }
    cout<<setiosflags(ios::fixed)<<setprecision(6)<<ans1-100<<" "<<ans2;
    system("pause");
    return 0;
}

发表于 2020-03-12 10:18:50 回复(0)