蓝桥杯学习记录6

蓝桥杯学习记录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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值