目前共有8篇帖子。 內容轉換:不轉換▼
 
點擊 回復
173 7
【C语言】入门训练 Fibonacci数列
一派護法 十九級
1樓 發表于:2015-11-21 21:26
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。

说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。

锦囊1 使用数组来保存F序列,只保存除10007的余数。
锦囊2 先令F[1]=1, F[2]=1,然后用F[i]=(F[i-1]+F[i-2])%10007来计算F[i]。
一派護法 十九級
2樓 發表于:2015-11-21 21:27
错误的答案:
#include <stdio.h>

//这是老师上课讲的递归法。。。
int F(int n)
{
    if (n <= 2)
        return 1;
    else
        return F(n - 1) + F(n - 2);
}

int main()
{
    int n;
    int reminder;
    scanf("%d", &n);
    reminder = F(n) % 10007;
    printf("%d\n", reminder);
    return 0;
}

评测结果  运行超时
得分  30  
CPU使用  运行超时  
内存使用  62.62MB  
一派護法 十九級
3樓 發表于:2015-11-21 21:28
正确的答案:
#include <stdio.h>

int main()
{
    int n, i;
    int F[3] = {1, 1, 1};
    scanf("%d", &n);
    if (n >= 3)
    {
        for (i = 3; i <= n; i++)
        {
            F[2] = (F[1] + F[0]) % 10007;
            F[0] = F[1];
            F[1] = F[2];
        }
    }
    printf("%d\n", F[2]);
    return 0;
}

评测结果  正确
得分  100  
CPU使用  0ms  
内存使用  1.597MB  
一派護法 十九級
4樓 發表于:2015-11-21 21:30
递归法写出的函数虽然简单,但是很耗系统资源。
一派護法 十九級
5樓 發表于:2015-11-21 21:30
输入:1000000
输出:114

--------------------------------
Process exited after 11.82 seconds with return value 0
Press any key to continue . . .
一派護法 十九級
6樓 發表于:2015-11-21 21:31
2楼的程序,即便是输入50,都无法得出计算结果。不过输入40的话:
40
2573

--------------------------------
Process exited after 2.181 seconds with return value 0
Press any key to continue . . .
一派護法 十九級
7樓 發表于:2016-3-1 17:02
其实,应该不需要判断n>=3:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i;
    int F[3] = {1, 1, 1};
    scanf_s("%d", &n);
    for (i = 3; i <= n; i++)
    {
        F[2] = (F[0] + F[1]) % 10007;
        F[0] = F[1];
        F[1] = F[2];
    }
    printf("%d\n", F[2]);
    system("pause");
    return 0;
}
一派護法 十九級
8樓 發表于:2016-3-1 17:03
仍然是前两个数相加得到新数,只不过数组只存储三个元素,且都是存储的都是余数。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:173 回複數:7
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-3-1 17:03
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。