注册 登录
编程论坛 C++教室

一个简单的题目总是出错,求大神解答

h21314 发布于 2013-09-25 15:06, 439 次点击
一球从100m处下落,每次落地后反弹回原高度的一半,再落下,求在第十次落地时共经过多少m?
我是这么写的却总是不对啊,求指出哪里错了啊
int i=1;
    double x;
    while(i<=10)
    {
    double t=100,sum=0;
        t=t*pow(1/2,(i-1));
    sum=sum+2*t;
    x=sum-100;
    i++;
    }
     cout<<"x="<<x<<endl;
7 回复
#2
3037709572013-09-25 15:26
#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int i=1;
    double t=100,sum=0;//t的定义放在外边去。
    while(i<=10)
    {
        sum+=t;
        cout<<"i="<<i<<",t="<<t<<",sum="<<sum<<endl;//随时查看结果
        t=t*double(pow(0.5,1));//这里要用0.5不能用1/2,或者用1.0/2或者1/2.0才行,注意数据类型。
        i++;
    }
    cout<<"第十次落地时共经过:sum="<<sum<<endl;
    return 0;
}
#3
3037709572013-09-25 15:31
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int i=1;
    double t=100,sum=0;
    while(i<=10)
    {
        sum+=t*double(pow(0.5,i-1));//还有这里,要么就不要去改变t的值,每次用0.5的n次方去乘以t
        //要么就想上面的  那个一样去改变t的值,然后每次再去将t的值折半。比如: t=t*0.5;

        cout<<"i="<<i<<",t="<<t<<",sum="<<sum<<endl;
        i++;
    }
    cout<<"第十次落地时共经过:sum="<<sum<<endl;
    return 0;
}
#4
rjsp2013-09-25 15:36
就是等比数列求和吧
程序代码:
#include <iostream>
using namespace std;

int main()
{
    const double a = 100;
    const int n = 10;

    // 2*a + (2*a)/2 + (2*a)/4 + (2*a)/8 + (2*a)/16 + (2*a)/32 + (2*a)/64 + (2*a)/128 + (2*a)/256 + (2*a)/512 - a
   
// == 4*a*( 1 - pow(0.5,n) ) - a
    cout << 4*a * ((1<<n)-1) / (1<<n) - a << endl;

    return 0;
}

#5
3037709572013-09-25 15:43
回复 4楼 rjsp
cout << 4*a * ((1<<n)-1) / (1<<n) - a << endl;
这个计算公式弄错了吧?
应该是:  cout <<2*a*((1<<n)-1)/(1<<n)<< endl;
#6
rjsp2013-09-25 16:50
以下是引用303770957在2013-9-25 15:43:45的发言:

cout << 4*a * ((1<<n)-1) / (1<<n) - a << endl;
这个计算公式弄错了吧?
应该是:  cout <<2*a*((1<<n)-1)/(1<<n)<< endl;
第一次落下行程 100m
弹起 50m
第二次落下行程 50m

也就是 第二次落地时共经过 100+50+50=200 m
你将 n==2 代入你的公式 cout <<2*a*((1<<n)-1)/(1<<n)<< endl; 输出是150,也就是你的公式是错误的。
#7
3037709572013-09-25 18:01
回复 6楼 rjsp
恩是的,我忽略了这一点。
#8
myworldcpp2013-10-02 21:24
程序代码:
#include<iostream>
using namespace std;
int main()
{
    double i,a(100),sum(100);//相当于a=100
    for(i=0;i<10;i++)
    {
    a=a/2;
    sum+=a*2;//意思跟sum=sum+a*2是一样的
    }
    cout<<sum<<endl;
    system("pause");
    return 0;
}
一看就懂

答案是:299.805

[ 本帖最后由 myworldcpp 于 2013-10-2 21:37 编辑 ]
1