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;
}