| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 826 人关注过本帖
标题:可能是算法有问题,希望高手能指出!马上就要上机考试了
只看楼主 加入收藏
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
结帖率:33.33%
收藏
 问题点数:0 回复次数:8 
可能是算法有问题,希望高手能指出!马上就要上机考试了
某级数的前两项A1=1,A2=1,以后各项有如下关系
A3=A1+2*A2
以后每一项都是它前面第2项与前面第一项的2倍的和,依次对整数M=100,1000,10000求出对应的n值,满足Sn<M,且Sn+1>=M。Sn=A1+A2+....+An,并依次把n存到b[0],b[1],b[2]中,我写的程序:
main()
{
int b[3],count=0,s=0,i,x=1,y=1,z,a[3]={100,1000,10000};
  for(i=0;i<3;i++)
  {while(s<a[i]-2)
   {  
      z=x+2*y;
      s=s+z;
       x=y;
       y=z;
       count++;
   }
  b[i]=count; printf("\n%d",b[i]);
  }  
getch();
}
运行结果是:
5
8
10
手工算也不对啊,S5才多少啊1+1+3+7+17=29
为什么呢?
搜索更多相关主题的帖子: 算法 考试 上机 count 
2008-04-08 20:55
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
#include<stdio.h>
int main()
{    int i;
    int a1=1,a2=1,a12,sn;
    int b[3];
    sn=a1+a2;
    while(1)    
    {
        a12=a1+2*a2;
        if(sn<100&&sn+a12>=100) b[0]=sn;
        if(sn<1000&&sn+a12>=1000) b[1]=sn;
        if(sn<10000&&sn+a12>=10000) {b[2]=sn;break;}
        sn=sn+a12;
        a1=a2;
        a2=a12;
    }
        for(i=0;i<3;i++)
            printf("%d\n",b[i]);
        return 0;
}

2008-04-08 21:32
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
收藏
得分:0 
你的答案和考试题目给的答案基本一样,我的错在哪呢?
你的答案和考试题目给的答案基本一样,我现在发现了我的一个错误,就是第一次循环完后,z,s等都没有归0,其次是算法不好第2次和第3次循环都没有用到第一次循环,白白浪费计算机时间,你的算法后一次充分利用了前一次的结果!
可如果除去我说的这1个错误和一个“绕弯路”外,我没发现有其他的错误,请指点!
2008-04-08 21:44
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
#include<stdio.h>
int main(void)
{
int b[3],count=2,s=0,i,x=1,y=1,z,a[3]={100,1000,10000};
//这里connt 的初始值应该是2,x=1,y=1你没算进去
  for (i=0;i<3;i++)
  {
      while(s<a[i]-2)
      {  
       z=x+2*y;
       s=z;
       x=y;
       y=z;
       count++;
      }
  b[i]=count;
  printf("%d\n",b[i]);
  }  
getch();
return 0;
}
2008-04-08 21:55
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
收藏
得分:0 
谢谢meteor57了!
谢谢meteor57了!,谢谢你的细心,谢谢你的回帖!
2008-04-08 22:03
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
没注意看......
Sn<M,且Sn+1>=M;
那就是
b[i]=count - 1;
2008-04-08 22:07
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
[bo]以下是引用 [un]wwwjw[/un] 在 2008-4-8 22:03 的发言:[/bo]

谢谢meteor57了!,谢谢你的细心,谢谢你的回帖!

不用这么客气,想几个月前,我刚开始学C的时候,也有很多热心的人帮助过我.
现在我也把我知道帮助大家啦~~~
闻道有先后嘛,呵呵~~~加油!
2008-04-08 22:11
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
n表示的应该是第几个数吧?
1+1+3+5+12+29=51
n应该是6啊.
2#的结果可是70啊.也对?...
2008-04-08 22:17
swustboy
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-7-28
收藏
得分:0 
#include <stdio.h>
unsigned int sum(int n);
unsigned int rel_n(unsigned int M);

int main(void)
{
    unsigned int number = 0;
    
        int b[3] = {0, 0, 0};
        int i = 0;
        
    b[0] = rel_n(100);
    b[1] = rel_n(1000);
    b[2] = rel_n(10000);

    for(i=0; i<3; i++)
    {
        printf("the number is:%d\n", b[i]);
    }
        

        getch();
 
        return 0;
}

unsigned int sum(int n)
{
    unsigned int result = 0;
    
    if(1==n)
    {
        return 1;;
    }
    
    if(2==n)
    {
        return 2;
    }
    
    result = sum( n - 2 ) + (2 * sum(n-1) );
    return result;
}

unsigned int rel_n(unsigned int M)
{
    int n = 2;
    unsigned int Number = 0;
    
    
    while( Number <= (M-1) )
    {
        n++;
        Number = sum(n);        
    }
    return (n-1);
}
2008-04-08 22:39
快速回复:可能是算法有问题,希望高手能指出!马上就要上机考试了
数据加载中...
 
   



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

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