蓝桥杯 送分填空题 数列求值 C++

该博客探讨了一种特定数列的性质,其中每一项是从前三项之和得出的。利用模运算的性质,博主展示了如何快速计算大规模项的末尾若干位数字。通过给出的代码示例,博主解释了如何在限定的时间和内存限制内求解第20190324项的最后44位数字,结果为4659。

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

给定数列 1, 1, 1, 3, 5, 9, 17, \cdots1,1,1,3,5,9,17,⋯,从第 44 项开始,每项都是前 33 项的和。

求第 2019032420190324 项的最后 44 位数字。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

思路

觉得难的是因为暂未了解此定理:

(a+b+c)%n=a%n+b%n+c%n;

(a*b*c)%n=a%n*b%n*c%n;

需要后n位,即%10^n。因为%10^n后得到的数是<=10^n的数。

如X%10 得到1位数......

 掌握上述结论,此题即送分秒杀题。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=20190324;
const int mod=1e4;//需要后n位就mod%10^n 
int a[N];
int main(){
a[0]=a[1]=a[2]=1;//初始化 
for(int i=3;i<N;i++){
	a[i]=a[i-1]%mod+a[i-2]%mod+a[i-3]%mod;
	a[i]%=mod;
}
cout<<a[N-1];//4659
return 0;
}

### 蓝桥杯填空题示例及相关答案 #### 示例 1: 马虎的算式 假设 \(a, b, c, d, e\) 代表 1~9 不同的 5 个数字(注意是各不相同的数字,且不含 0)。能满足形如: \[ ab \times cde = adb \times ce \] 这样的算式一共有多少种? **解答**: 此问可以通过暴力枚举的方法解决。由于 \(a, b, c, d, e\) 是互不相同且取自 1 至 9 的整数,因此可以采用五重嵌套循环来遍历所有可能性,并验证上述等式是否成立。 以下是实现该算法的 Python 代码: ```python count = 0 for a in range(1, 10): for b in range(1, 10): if b == a: continue for c in range(1, 10): if c == a or c == b: continue for d in range(1, 10): if d == a or d == b or d == c: continue for e in range(1, 10): if e == a or e == b or e == c or e == d: continue ab = 10 * a + b cde = 100 * c + 10 * d + e adb = 100 * a + 10 * d + b ce = 10 * c + e if ab * cde == adb * ce: count += 1 print(count) ``` 运行以上程序可得出结果为 **142 种**[^1]。 --- #### 示例 2: 字符串组合 由字符 `A`, `B`, 和 `C` 可以组成许多字符串。例如:"A", "AB", "ABC", "ABA", "AACBB" 等。如果要求组成的字符串长度固定为 3,则有多少种不同的字符串? **解答**: 对于每个位置可以选择三个字符之一 (`A`, `B`, 或 `C`),总的可能性数目等于 \(3^3=27\) 种[^2]。 --- #### 示例 3: 数字补全填空 已知一段 C++ 源码如下所示,请补充缺失的部并计算最终输出的结果。 ```cpp #include <iostream> using namespace std; int main() { int sum = 0; for(int i = 1; i <= ___; ++i){ sum += i; } cout << sum; } ``` 若空白处填写的是数值 `100`,则程序执行后的输出应为? **解答**: 当填充值为 `100` 时,程序会累加从 1 到 100 的所有正整数之和。根据高斯求和公式可知,\(S=\frac{n(n+1)}{2}\),代入得 \(S=\frac{100\times101}{2}=5050\)。故输出结果为 **5050**[^3]。 --- #### 示例 4: 类斐波那契循环数 定义一种特殊的数——类斐波那契循环数。如果某个数列中的某一项重复出现了原数字本身,则称其为类斐波那契循环数。在区间 `[0, 10^7]` 中找出最大的此类数。 **解答**: 经过析与编程测试发现,在指定范围内最大符合条件的数为 **7913837**[^4]。 --- #### 示例 5: N皇后问简化版 在一个 \(n \times n\) 的棋盘上放置 \(n\) 个“受伤”的皇后,使得任意两个皇后之间不会互相攻击。问是否存在合法布局方案?如果有,请提供至少一组解;如果没有,请说明原因。 **解答**: 针对特定大小的棋盘 (\(n>3\)) 存在多种解决方案。例如当 \(n=4\) 时的一种可行配置为: ``` .Q.. ...Q Q... ..Q. ``` 其中 `"."` 表示空位而 `"Q"` 表示皇后的所在位置[^5]。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Prudento

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值