| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:一个简单的题目总是出错,求大神解答
只看楼主 加入收藏
h21314
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-9-21
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
一个简单的题目总是出错,求大神解答
一球从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;
搜索更多相关主题的帖子: double 
2013-09-25 15:06
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:7 
#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;
}

♂ 死后定当长眠,生前何须久睡。♀
2013-09-25 15:26
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
#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;
}

♂ 死后定当长眠,生前何须久睡。♀
2013-09-25 15:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
就是等比数列求和吧
程序代码:
#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;
}

2013-09-25 15:36
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
回复 4楼 rjsp
cout << 4*a * ((1<<n)-1) / (1<<n) - a << endl;
这个计算公式弄错了吧?
应该是:  cout <<2*a*((1<<n)-1)/(1<<n)<< endl;

♂ 死后定当长眠,生前何须久睡。♀
2013-09-25 15:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用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,也就是你的公式是错误的。
2013-09-25 16:50
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
回复 6楼 rjsp
恩是的,我忽略了这一点。

♂ 死后定当长眠,生前何须久睡。♀
2013-09-25 18:01
myworldcpp
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2013-9-30
收藏
得分:7 
程序代码:
#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 编辑 ]
2013-10-02 21:24
快速回复:一个简单的题目总是出错,求大神解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048973 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved