| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖
标题:加一句得不到预期的效果?
只看楼主 加入收藏
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
结帖率:50%
收藏
 问题点数:0 回复次数:14 
加一句得不到预期的效果?
题目是:要算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: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
#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: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:0 
上面的好像也只能算a+aa+aaa这样的 ,但是后面的+aa+a没有算上啊!
2007-12-25 20:08
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
#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: 1
来 自:xmu
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-12-13
收藏
得分:0 
你的算法是有问题的:
假设 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: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS有没有仔细分析上面的程序呢?你们两个的算法都是正确的,第三次循环应该是
第三次循环:tn=111;
                       sn=(1+11+111)*2-111=1+11+111+11+1;
并没有多两个1,仔细分析了程序再发言吧……

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-28 08:49
Lonelie
Rank: 1
来 自:xmu
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-12-13
收藏
得分:0 

ls的再仔细看看
2007-12-28 09:09
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
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: 1
来 自:xmu
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-12-13
收藏
得分:0 
当然有异议了

如果按你写的程序,当然是正确的……
可你跟楼主的相比少一句sn=2*sn-tn
你分析的到底是谁的程序?
2007-12-28 16:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
结果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 | TOP | 手机版

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