当前位置:   article > 正文

CCF-GESP计算机学会等级考试2023年12月二级C++第一题:小杨做题 题解_c++gesp 二级2023年12月答案

c++gesp 二级2023年12月答案

看到这道题时,斐波那契数组的基因已经开始颤抖了吧,

第一部分:准备工作

此时,开始第一部分:

可以先打出一个基础求斐波那契数列求第n项的代码:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n, a = 1, b = 1, sum = 0, i;
  6. cin >> n;
  7. if (n <= 2)
  8. {
  9. cout << "1" << endl;
  10. }
  11. else
  12. {
  13. for (i = 2; i < n; i++)
  14. {
  15. sum = a + b;
  16. a = b;
  17. b = sum;
  18. }
  19. cout << sum << endl;
  20. }
  21. return 0;
  22. }

接下来,只需对其进行微调,即可完成 “ 小杨做题 

首先:输入的a,b,n,m,c

a,是斐波那契数列第一个数

b,是斐波那契数列第二个数

n,是数列长度,也就是范围

m,是判定数列的和

经过分析,小杨既然每天写前两天的和,那么他前几天写的,那就正是规定天数写的数量。

那么我们定义一个 “ ans ”,为第三个数,也就是每次判定小杨作业之和的变量。

那么,便可以完成程序的第一部分:

  1. int a, b, n, m, c;
  2. int ans;
  3. cin >> a >> b >> m >> n;
  4. ans = a + b;

第二部分:斐波那契数列的循环

已经有了这些变量,开始第二部分:斐波那契数列的循环

这一部分没有什么强调的,一个循环,第一个变量第二个变量的轮流切换,再加上题目已给出的判定是否 " 大于等于m " 就可以完成第二部分:

  1. for (int i = 3; i <= n; i++)
  2. {
  3. c = a + b;
  4. ans += c;
  5. a = b;
  6. b = c;
  7. if (c >= m)
  8. {
  9. break;
  10. }

 第三部分:特殊情况的处理

记得吗,在斐波那契数列中,有对非常不规则的兄弟俩,“ 1 ”,“ 1 ”这对数正是数组的前两个数,这俩中的第二个“ 1 ”甚至是斐波那契随便安排的一个数,毕竟因为这第二个数看前面只有一个数,看后面,还有无数个数等着它呢。

那么,第一个数和第二个数便需要特殊处理,用两个if判断,便可以完成:

  1. if (n == 1)
  2. {
  3. ans = a;
  4. }
  5. if (n == 2)
  6. {
  7. ans = a + b;
  8. }

第四部分:完整程序 

当然,有始有终,别忘了输出,最后的代码是这样的:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int a, b, n, m, c;
  6. int ans;
  7. cin >> a >> b >> m >> n;
  8. ans = a + b;
  9. for (int i = 3; i <= n; i++)
  10. {
  11. c = a + b;
  12. ans += c;
  13. a = b;
  14. b = c;
  15. if (c >= m)
  16. {
  17. break;
  18. }
  19. }
  20. if (n == 1)
  21. {
  22. ans = a;
  23. }
  24. if (n == 2)
  25. {
  26. ans = a + b;
  27. }
  28. cout << ans;
  29. return 0;
  30. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/707066
推荐阅读
相关标签
  

闽ICP备14008679号