第十届蓝桥杯C/C++省赛研究生组(填坑中)

目录

    • 试题A:立方和(5分)
    • 试题B:字串数字(5分)
    • 试题C:质数(10分)
    • 试题D:最短路(10分)
    • 试题E:RSA解密(15分)
    • 试题F:Fibonacci数列与黄金分割(15分)
    • 试题G:扫地机器人
    • 试题H:修改数组(20分)
    • 试题I:灵能传输(25分)
    • 试题J:空间跳跃(25分)


试题A:立方和(5分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第1张图片

#include
using namespace std;
bool ifCon(int n){
	while(n){
		int temp=n%10;
		if(temp==2 || temp==0 || temp==1 || temp==9){
			return true;
		}
		n/=10;
	}
	return false;
}
int main() {
	int sum=0;
	for(int i=1;i<=2019;i++){
		if(ifCon(i)){
			sum+=pow(i,3);
		}
	}
	cout<<sum<<endl;
	return 0;
}

题目答案:4097482414389

考点:注意sum要用long long


试题B:字串数字(5分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第2张图片

#include
using namespace std;
int main(){
	string list="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	string x="LANQIAO";
	long long sum=0;
	int y=0; //保存次方
	for(int i=x.length()-1;i>=0;i--,y++){
		int temp=list.find(x[i])+1;
		sum+=temp*pow(26,y);
	}
	cout<<sum<<endl;
	return 0;
}

题目答案:3725573269


试题C:质数(10分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第3张图片

#include
using namespace std;
bool isPrime(int n){
	if(n<=1){
		return false;
	}
	else if(n==2){
		return true;
	}
	else{
		for(int i=2;i<n;i++){
			if(n%i==0){
				return false;
			}
		}
		return true;
	}
}
int main(){
	int count=0;
	int i=0;
	while(count!=2019){
		i++;
		if(isPrime(i)){
			count++;
		}
		
	}
	cout<<i<<endl;
}

试题D:最短路(10分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第4张图片


试题E:RSA解密(15分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第5张图片

import libnum
import gmpy2
e=212353
c=20190324
n=1001733993063167141
print(libnum.factorize(n))
p=1123984201
q=891234941
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
print(pow(c,d,n))

题目答案:579706994112328949

这题我暂时用的是python写的,一定会把C++的补上的,用C++写确实比Python困难很多。
主要在于,大整数分解,求逆元


试题F:Fibonacci数列与黄金分割(15分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第6张图片
先按正常逻辑写

#include
using namespace std;
long long F(long long n){
	if(n==1 || n==2){
		return 1;
	}
	else{
		return F(n-1)+F(n-2);
	}
}
int main(){
	long long  n;
	cin>>n;
	cout<<fixed<<setprecision(8)<<F(n)*1.0/F(n+1)<<endl;
	return 0;
}

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第7张图片
因为当输入的n过大,递归占用内存无比大,几乎算不出来
发现只要超过一个数之后,值都一样,测试出来是20
更改代码

#include
using namespace std;
long long F(long long n){
	if(n==1 || n==2){
		return 1;
	}
	else{
		return F(n-1)+F(n-2);
	}
}
int main(){
	long long  n;
	cin>>n;
	double x;
	if(n>20){
		x=F(20)*1.0/F(21);
	}
	else{
		x=F(n)*1.0/F(n+1);
	}
	cout<<fixed<<setprecision(8)<<x<<endl;
	return 0;
}


试题G:扫地机器人

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第8张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第9张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第10张图片


试题H:修改数组(20分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第11张图片
在这里插入图片描述


试题I:灵能传输(25分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第12张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第13张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第14张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第15张图片


试题J:空间跳跃(25分)

第十届蓝桥杯C/C++省赛研究生组(填坑中)_第16张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第17张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第18张图片
第十届蓝桥杯C/C++省赛研究生组(填坑中)_第19张图片

你可能感兴趣的:(LeetCode,C++,c++,蓝桥杯)