标题:学渣求帮助 入门训练 Fibonacci数列
只看楼主
luciferxiaoz
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2013-11-23
结帖率:100%
已结贴  问题点数:20 回复次数:13 
学渣求帮助 入门训练 Fibonacci数列
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
程序代码:
#include <stdio.h>
void main()
{
    int n,i;
    long j,a[10000];
    scanf ("%d",&n);
    a[0]=1;a[1]=1;
    for (i=2;i<=n;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    j=a[n-1]%10007;
    printf("%d",j);
}

请问我这个程序哪里不太严谨什么的。我提交到蓝桥杯平台的时候说是运行错误,求大神帮忙~谢谢、
搜索更多相关主题的帖子: 面试官 
2013-11-23 16:49
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:1 
栈太大了,会爆的long j,a[10000];

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-11-23 19:36
ljx小子
Rank: 8Rank: 8
来 自:星星
等 级:蝙蝠侠
威 望:2
帖 子:222
专家分:916
注 册:2013-10-7
得分:0 
程序代码:
#include <stdio.h>
fun(int i)
{
long n=0;
if(i==1||i==2)
n=1;
else
n=fun(i-2)+fun(i-1);
return n;

}

void main()
{
    int a,b,y;
    scanf("%d",&a);


    b=fun(a);
    y=b%10007;
    printf("%d\n",y);
}
这个应该是考查递归函数的应用的,所以还是用递归比较好吧

。。。。。。。。。。。
2013-11-23 20:11
luciferxiaoz
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2013-11-23
得分:0 
回复 2楼 pauljames
会爆的是哪个。我是应该把数组的元素改多么?
2013-11-23 20:59
luciferxiaoz
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2013-11-23
得分:0 
回复 3楼 ljx小子
好像那个平台不能用void main()  好像内个只让用int main() 然后return 0;
2013-11-23 21:01
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:7 
如果输入 100000,输出什么?

这道题好像不会考这么难,哈哈



说一下楼主的问题吧

你的数据类型是整数,所以要考虑越界,事实上 F(47)已经超过int的存储范围,你可以打印 a[46]看看

[ 本帖最后由 azzbcc 于 2013-11-23 21:18 编辑 ]


[fly]存在即是合理[/fly]
2013-11-23 21:07
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
得分:3 
to lz:
a[i]=a[i-1]+a[i-2];改成a[i]=(a[i-1]+a[i-2])%10007;

to 3L:
楼主的程序错在越界,你这个不仅越界,还会超时
2013-11-23 21:34
luciferxiaoz
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2013-11-23
得分:0 
回复 6楼 azzbcc
难道要用 long long= =
2013-11-23 21:42
ljx小子
Rank: 8Rank: 8
来 自:星星
等 级:蝙蝠侠
威 望:2
帖 子:222
专家分:916
注 册:2013-10-7
得分:8 
那么就改成
程序代码:
#include <stdio.h>
fun(int i)
{
long n=0;
if(i==1||i==2)
n=1;
else
n=fun(i-2)+fun(i-1);
return n;

}

int main()
{
    int a,b,y;
    scanf("%d",&a);


    b=fun(a);
    y=b%10007;
    printf("%d\n",y);
    return 0;
}

。。。。。。。。。。。
2013-11-23 22:32
thb
Rank: 2
等 级:论坛游民
帖 子:26
专家分:31
注 册:2013-11-21
得分:1 
递归
2013-11-23 23:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424067-1-1.html




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

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