21xrx.com
2024-11-10 00:29:00 Sunday
登录
文章检索 我的文章 写文章
2018年信息学奥赛一本通c++版在线评测系统答案
2023-07-05 11:41:47 深夜i     --     --
信息学奥赛 一本通c++版 在线评测系统 2018年 答案

2018年信息学奥赛一本通c++版在线评测系统已经上线,让参赛者更加便捷地进行练习与模拟考试。本文将为大家分享一些答案,希望能够帮助大家更好地准备比赛。

第一题:计算斐波那契数列

思路:斐波那契数列的第n项可以通过递推公式F(n)=F(n-1)+F(n-2)计算得出。注意初始条件F(1)=1,F(2)=1。

代码:

#include

using namespace std;

int main()

{

  int n, f1 = 1, f2 = 1, f3;

  cin >> n;

  if (n == 1 || n == 2)

    cout << 1;

  else

  {

    for (int i = 3; i <= n; i++)

    {

      f3 = f1 + f2;

      f1 = f2;

      f2 = f3;

    }

    cout << f3;

  }

  return 0;

}

第二题:求阶乘之和

思路:阶乘之和的公式为n!=1×2×3×…×n,将n个数相加即可。

代码:

#include

using namespace std;

int main() {

  int n;

  cin >> n;

  long long ans = 0, fac = 1;

  for (int i = 1; i <= n; i++) {

    fac *= i;

    ans += fac;

  }

  cout << ans << endl;

  return 0;

}

第三题:数的分解

思路:一个数n可以分解为若干个不同的数字之和,可以通过枚举每个数字来计算。注意要去掉重复的情况。

代码:

#include

#include

using namespace std;

int main() {

  int n;

  cin >> n;

  vector ans;

  for (int i = 9; i >= 1; i--) {

    while (n >= i) {

      n -= i;

      ans.push_back(i);

    }

  }

  if (n != 0)

    cout << -1 << endl;

  else {

    for (int i = ans.size() - 1; i >= 0; i--) {

      cout << ans[i];

    }

    cout << endl;

  }

  return 0;

}

以上是本文分享的三道题目的解答,希望可以对大家的练习有所帮助。当然,在比赛中遇到的具体题目还是要灵活应对,不要忘记在练习的过程中加强自己的代码能力和逻辑思维能力,才能在比赛中取得优秀的成绩。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复