| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 779 人关注过本帖
标题:斐波那契数列的翻版,可是不知道错哪里?
只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:16 
斐波那契数列的翻版,可是不知道错哪里?
程序代码:
#include<stdio.h>
int main()
{
    int n,a[42],i,m;
    a[0]=a[1]=1;
    for(i=2;i<=42;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&m);
        if(i<n-1) printf("Scenario #%d:\n%d\n\n",i+1,a[m+1]);
        else printf("Scenario #%d:\n%d\n",i+1,a[m+1]);
    }
    return 0;
}


Description

在世界的某个角落有这样的一个国家,他们的计数全部是采用二进制的。这样的好处就是他们只需要两个阿拉伯数字就OK了! 这个国家对数字是很迷信的。他们很讨厌有两个或两个以上的数字1连在一起,比如000110这个数字就不受人们的欢迎(嘿嘿,就像我们对数字4不是很欢迎一样)。 这里的人们经常做的一件事情是给你一个数的位数再将它们的所有的排列写出来,再将那些不讨人喜欢的数字全部去掉,再计算出讨人喜欢的数字的个数。 例如:给你一个数的位数是3,它的所有排列是000 001 010 100 110 101 011 111,很明显受人喜欢的数字是5个! 也许你认为这是一件很没价值的事情,但这确是很必要的事情,比如说某一家人要做喜事,那你说选日子是不是很重要呢? 有一天这件事情被你知道了,你很乐于助人,决定编一个程序来帮他们解决这个问题!
Input

第一行为测试数据的组数。 每组测试数据为一行,每行只有一个值为二进制数的位数s(s<=40)。
Output

每组测试数据对应一个输出。输出包括两行。第一行为"Scenario #i:"(不包括双引号), 其中i为测试数据的组数,从1开始。第二行为受人们喜欢的位数为s的数的个数。 每组测试情况以一个空行隔开。
Sample Input

2
3
1
Sample Output

Scenario #1:
5

Scenario #2:
2
2011-12-23 23:00
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:12 
你还是老样子,
for(i=2;i<=42;i++)    //i=42就数组越界了
{
        a[i]=a[i-1]+a[i-2];   
}

总有那身价贱的人给作业贴回复完整的代码
2011-12-23 23:06
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:8 
问题应该就是楼上所说的。
这里我忍不住想听楼主解释一下,为什么它就是斐波那契数列呢?

重剑无锋,大巧不工
2011-12-23 23:51
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3楼 beyondyf
我后来看了下题目,也感到很好奇

总有那身价贱的人给作业贴回复完整的代码
2011-12-23 23:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 4楼 embed_xuel
我奇怪的是,楼主有能力分析这类递推算法,但编码的水平却很一般。这不太符合常理

重剑无锋,大巧不工
2011-12-24 00:11
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
我表示这很正常,因为我们的编程能力实在是......
2011-12-24 00:53
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
我和楼上做的题目一模一样但是我的也是答案错误
程序代码:
#include<stdio.h>
int main()
{
    int num1=1,num2=2,num3=2;
    int i,j,sum,sum1;
    scanf("%d",&sum);
    for(i=0;i<sum;i++)
    {
            scanf("%d",&sum1);
            for(j=1;j<sum1;j++)
            {
                num3=num1+num2;
                num1=num2;
                num2=num3;
            }
            printf("Scenario #%d:\n%d",i+1,num3);
            if(i==sum-1)
            {printf("\n");break;}
            printf("\n\n");
            num1=1;num2=2;num3=2;
    }
    return 0;
}

我也不知为什么
2011-12-24 00:55
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你们学校的题够严谨的。
算法没错,问题出边界值上。当输入为0时,结果应为0。
大家为了计算方便,将a[0]置为1了。
我也本以为输入中不会出现0的,所以WA了半天。下面是AC代码,原理一样,只为交流编码风格。
程序代码:
#include<stdio.h>
#define MAX    40
int main()
{
    int f[MAX + 1] = {0, 2, 3}, i, n, t;
    for(i = 3; i <= MAX; f[i++] = f[i - 1] + f[i - 2]);
    scanf("%d", &n);
    printf("Scenario #1:\n%d\n", f[scanf("%d", &t), t]);
    for(i = 2; i <= n; printf("\nScenario #%d:\n%d\n", i++, f[scanf("%d", &t), t]));
    return 0;
}

重剑无锋,大巧不工
2011-12-24 10:23
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
回复 8楼 beyondyf
同意楼上,自己改了一下也AC了.
2011-12-24 10:29
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
话说,大概是成长的历程不同。
我学编程时是先写了大量的练习代码,之后学习的算法。
你们现在可能是,科班出身编码算法同时学,所以会是这样的情况?

我就不抢风头了,请“工藤新一”或“血轮眼”解释一下为什么是斐波那契数列吧。

你俩是同学吧?解释清楚了,我送你俩每人50分专家分

重剑无锋,大巧不工
2011-12-24 10:37
快速回复:斐波那契数列的翻版,可是不知道错哪里?
数据加载中...
 
   



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

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