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

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

第一部分:准备工作

此时,开始第一部分:

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

#include <iostream>
using namespace std;
int main()
{
	int n, a = 1, b = 1, sum = 0, i;
	cin >> n;
	if (n <= 2)
	{
		cout << "1" << endl;
	}
	else
	{
		for (i = 2; i < n; i++)
		{
			sum = a + b;   
			a = b;
			b = sum;
		}
		cout << sum << endl;
	}
	return 0;
}

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

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

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

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

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

m,是判定数列的和

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

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

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

    int a, b, n, m, c;
	int ans;
	cin >> a >> b >> m >> n;
	ans = a + b;

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

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

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

	for (int i = 3; i <= n; i++)
	{
		c = a + b;
		ans += c;
		a = b;
		b = c;
		if (c >= m)  
		{
			break;
		}
	}

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

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

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

    if (n == 1) 
	{
		ans = a;
	}
	if (n == 2) 
	{
		ans = a + b;
	}

第四部分:完整程序 

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

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a, b, n, m, c;
	int ans;
	cin >> a >> b >> m >> n;
	ans = a + b;
	for (int i = 3; i <= n; i++)
	{
		c = a + b;
		ans += c;
		a = b;
		b = c;
		if (c >= m)  
		{
			break;
		}
	}
	if (n == 1) 
	{
		ans = a;
	}
	if (n == 2) 
	{
		ans = a + b;
	}
	cout << ans;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值