【CSP初赛】2024初赛练习-阅读程序(1)

· · 算法·理论

主题:斐波那契数列

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fi(int x) {
    if(x == 1 || x == 2)
        return 1;
    return fi(x - 1) + fi(x - 2);
}
int main(){
    int n;
    cin>>n;
    while(n--) {
        int a;
        ll res = 0;
        cin>>a;
        res = fi(a);
        cout<<res<<endl;
    }
}

假设输入的a不会超过30,完成下面的判断题和选择题

判断题

1.该程序使用的方法是递推。()

A.正确 B.错误

2.第3行等价于"#define ll long long;"。()

A.正确 B.错误

3.第14行可以改写为"int res=0;"而不会影响结果的正确性。()

A.正确 B.错误

4.执行程序总是会输出一个整数。()

A.正确 B.错误

5.如果a=5,函数fi会被执行9次。()

A.正确 B.错误

选择题

6.输入为"2"和"6 8"时,输出为。

A."6 16" B."8 16" C."6 21" D."8 21"

答案+解析

1.错。本题使用的是递归,从大到小+回溯求得答案

2.错。"#define"语句的末尾不需要分号。这样原来为"ll n;"的语句会被换成:"long long; n;",不符合语法

3.对。当输入的a很大时,会出现答案爆int的情况。但题目说输入的a<=30,经计算发现还在int范围内。

4.错。程序虽没有可以形成小数的除法等运算,但如果输入的n<=0,则无输出。

5.对,如下:

  s[fi(1)]: 1次
  s[fi(2)]: 1次
  s[fi(3)]: 3次 = 调用fi(3)+s[fi(1)]+s[fi(2)]
  s[fi(4)]: 5次 = 调用fi(4)+s[fi(2)]+s[fi(3)]
  s[fi(5)]: 9次 = 调用fi(4)+s[fi(3)]+s[fi(4)]

6.D 可知,斐波那契数列的前8项为:1 1 2 3 5 8 13 21,和D符合

End

这里是 YLCHUP,谢谢大家!

文章同步到 CSDN博客