蓝桥杯学习记录6
一:测试练习
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
解题思路:
该题的思路很简单,就是运用一个循环即可,但是在第一次提交时出现了运行时间过长,之后在修改时了解题意,目的是为了求余数,并不是求F(n),所以没有必要先求出F(n),直接求余放入到循环计算中即可,这样可以减少运算的时间
具体代码:
#include<iostream>
using namespace std;
long t[1000000];
int main()
{
int n;
int a;
cin>>n;
t[1]=t[2]=1;
if(n>2){
for(a=3;a<=n;a++){
t[a]=(t[a-1]+t[a-2])%10007;//直接计算
}
}
cout<<t[n];
return 0;
}
二:视频练习:
视频名称及链接
https://www.bilibili.com/video/BV1jE411g76D?p=7
枚举算法视频讲解
学习总结:
枚举是根据提出的问题,一一列举该问题的所有的可能的解,并逐一列出来的过程中,检验每个个可能解是否是问题的真正的解,枚举法一般比较直观,容易理解。
枚举法的机构就是:枚举范围循环+条件判断语句。
对应练习:
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
#include<iostream>
using namespace std;
int main(){
int n;
1<=n<=54;
cin>>n;
int a;
int b;
int i,j,k;
for(i=1;i<=9;i++){
for(j=0;j<=9;j++){
for(k=0;k<=9;k++){
a=i+j+k+j+i;
if(a==n){
cout<<i<<j<<k<<j<<i<<endl;
}
}
}
}
for(i=1;i<=9;i++){
for(j=0;j<=9;j++){
for(k=0;k<=9;k++){
b=i+j+k+k+j+i;
if(b==n){
cout<<i<<j<<k<<k<<j<<i<<endl;
}
}
}
}
return 0;
}