Skip to content

14187: 【原4187】斐波那契数列

题目

题目描述

author: 程序设计思想与方法助教组张亦弛 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4187 ## 问题描述 斐波那契数列(意大利语:Successione di Fibonacci),又译为菲波拿契数列、菲波那西数列、费氏数列、黄金分割数列。

在数学上,费波那契数列是以递归的方法来定义,用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……

请编写程序接收一个非零自然数N(N>0),表示第N位斐波那契数列,并输出此斐波那契数。

提示

用 unsigned int 定义输出。

输入输出描述

输入

  • 输入一个非零自然数N(N小于等于50)

输出

  • 输出第N位斐波那契数
  • 若N不是非零自然数,则输出"error!"

程序运行示例0

Sample Input 0

1

Sample Output 0

0

程序运行示例1

Sample Input 1

5

Sample Output 1

3

程序运行示例2

Sample Input 2

0

Sample Output 2

error!

注意

  • 不要显示多余的提示信息,避免输出判定错误
  • 注意判断输出信息是否符合要求。

ligongzzz's solution

#include "iostream"
using namespace std;

int main() {
    int n = 0;
    unsigned int ans[100] = { 0 };
    cin >> n;
    if (n <= 0 || n > 50) {
        cout << "error!";
        return 0;
    }
    ans[1] = 0;
    ans[2] = 1;
    for (int i = 3; i <= n; i++) {
        ans[i] = ans[i - 2] + ans[i - 1];
    }
    cout << ans[n];

    return 0;
}

satgo1546's solution

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    unsigned a = 1, b = 1;
    scanf("%d", &argc);
    if (argc <= 0) exit(puts("error!") & 0);
    if (argc <= 3) exit(printf("%d\n", argc / 2) & 0);
    argc -= 3;
    if (argc & 1) goto l2;
l1:
    a += b;
    argc--;
l2:
    b += a;
    argc--;
    if (argc) goto l1;
    printf("%u\n", b);
    return 0;
}