| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 917 人关注过本帖
标题:加一句得不到预期的效果?
收藏  订阅  推荐  打印 
qlc00
Rank: 1
等级:新手上路
帖子:28
积分:410
注册:2007-11-26
加一句得不到预期的效果?

题目是:要算Sn=a+aa+aaa+aa+a(此时n=3,n表示的是aaa中连续a的个数)
代码是这样的
#include <iostream>
using namespace std;
int main()
{
    int a,n,i=1,sn=0,tn=0;
    cout<<"a,n="<<endl;
    cin>>a>>n;
    while(i<=n)
    {
        tn=tn+a;
        sn=sn+tn;
             sn=2*sn-tn;
        a=a*10;
        i++;
    }
    cout<<"a+aa+aaa+......="<<sn<<endl;
    return 0;
}
为什么答案对不住啊!
搜索更多相关主题的帖子: 效果  int  aaa  得不到  std  
2007-12-25 19:31
lonmaor
Rank: 12Rank: 12Rank: 12
来自:Zz.
等级:版主
威望:11
帖子:578
积分:5104
注册:2007-11-27

#include <iostream>
using namespace std;
int main()
{
    int a,n,i=1,sn=0,tn=0;
    cout<<"a,n="<<endl;
    cin>>a>>n;
    while(i<=n)
    {
        tn=tn*10+a;
        sn=sn+tn;
        i++;
    }
    cout<<"a+aa+aaa+......="<<sn<<endl;
    return 0;
}
2007-12-25 19:50
qlc00
Rank: 1
等级:新手上路
帖子:28
积分:410
注册:2007-11-26

上面的好像也只能算a+aa+aaa这样的 ,但是后面的+aa+a没有算上啊!
2007-12-25 20:08
lonmaor
Rank: 12Rank: 12Rank: 12
来自:Zz.
等级:版主
威望:11
帖子:578
积分:5104
注册:2007-11-27

#include <iostream>
using namespace std;
int main()
{
    int a,n,i=1,sn=0,tn=0;
    cout<<"a,n="<<endl;
    cin>>a>>n;
    while(i<=n)
    {
        tn=tn*10+a;
        sn=sn+tn;
        i++;
    }
    sn=2*sn-tn;
    cout<<"a+aa+aaa+......="<<sn<<endl;
    return 0;
}

没仔细看题。不好意思
2007-12-25 20:24
Lonelie
Rank: 2
来自:xmu
等级:注册会员
帖子:47
积分:734
注册:2007-12-13

你的算法是有问题的:
假设 n=3
第一次循环:tn=1
                         sn=1;
第二次循环:tn=11;
           sn=(1+11)*2-11=1+11+1;
第三次循环:tn=111;
                       sn=(1+11+1+111)*2-111=1+11+111+11+1+1+1;
显然多出了两个1;
其实你的原理是:
   递推关系:s(n)=2*[ s(n-1)+t(n)]-t(n)=2*s(n-1)+t(n);
这显然是不正确的!
改正:
while(i<=n)
    {
        tn=tn+a;
        sn=sn+tn;
        a=a*10;
        i++;
    }
sn=2*sn-tn;
2007-12-25 20:54
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

LS有没有仔细分析上面的程序呢?你们两个的算法都是正确的,第三次循环应该是
第三次循环:tn=111;
                       sn=(1+11+111)*2-111=1+11+111+11+1;
并没有多两个1,仔细分析了程序再发言吧……

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-28 08:49
Lonelie
Rank: 2
来自:xmu
等级:注册会员
帖子:47
积分:734
注册:2007-12-13


ls的再仔细看看
2007-12-28 09:09
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

while(i<=n)
    {
        tn=tn*10+a;
        sn=sn+tn;
        i++;
    }
tn初值为0.,第一次循环后
tn=a;sn=tn=a,i=1;
第二次循环后:
tn=tn*10+a;即tn=aa;sn=sn+tn,即sn=a+aa;i=2
第三次循环后:
tn=tn*10+a=aa*10+a=aaa;sn=sn+tn=a+aa+aaa;i=3等于n,退出循环
结果sn=(a+aa+aaa)*2-aaa=a+a+aa+aa+aaa;

有异议吗?

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-28 12:55
Lonelie
Rank: 2
来自:xmu
等级:注册会员
帖子:47
积分:734
注册:2007-12-13

当然有异议了

如果按你写的程序,当然是正确的……
可你跟楼主的相比少一句sn=2*sn-tn
你分析的到底是谁的程序?
2007-12-28 16:06
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

结果sn=(a+aa+aaa)*2-aaa=a+a+aa+aa+aaa;

是我不好,没有写出来那一句,但是我在分析过程里面已经写了那一句的后果了。如上。
执行到sn=2*sn-tn的时候,sn等于a+aa+aaa,tn=aaa(见上面的分析)
所以sn=2*(a+aa+aaa)-aaa=a+a+aa+aa+aaa+aaa-aaa=a+aa+aaa+aa+a;

一起讨论是好事情 LS再想想看~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-29 02:44
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050184 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved