飞道的博客

分享三道 最简单的蓝桥杯试题

347人阅读  评论(0)

作为一名大一学生应该是力求上进的!!!!!!!
今天给大家分享三个蓝桥杯简单的基础题。以后每天都会有的。会逐步变难。一起冲刺今年的蓝桥杯省赛
至于为什么要参加比赛呢!
都是为了挣钱所以才学习的
首先我给大家看阿里的招聘信息

大家看 阿里的招聘 把第一行直接写上 有竞赛获奖。废话就不说了,直接上题吧

试题:数的分解

【问题描述】把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同意交换3个整数的顺序被视为同一种方法,例如1000+1001+18和1001+1000+18被视为同一种。
这是个填空题我们中只需要把结果的出来即可 不用思考步骤过程
因为我们才刚开始嘛,所以我直接暴力解决 先上代码再解释

#include<bits/stdc++.h>
using namespace std;
int ans;

int f(int n){
   
	int t;
	while(n>0){
   
		t=n%10;
		n/=10;
		if(t==2||t==4) return 0;
	}
	return 1;
}

int main(){
   
	for(int i=1;i<2019;i++){
   
		if(f(i)==0) continue;
		for(int j=i+1;j<2019;j++){
   
			if(f(j)==0) continue;
			for(int k=j+1;k<2019;k++){
   
				if(f(k)==0) continue;
			if(i+j+k==2019) ans++;
			}
		}
	}
	cout<<ans;
	
	return 0;
}

第一行 是一个万能头文件
主要思路:将三个数直接暴力枚举,将其每一位都分解出来判断是否有2和4 如果存在直接排除 如果没有则暂时“录取这个数”;再往下执行
因为这些题都是基础题。相信大家很容易遍可以理解的

试题:特别数的和

时间限制:1.0s内存限制:256.0MB
问题描述】小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少?

这是一个编程题;时间上面大家要注意了,。但是这个题暴力解决一样不超过限时的;下一步————》上代码

#include<bits/stdc++.h>
using namespace std;
int f(int n){
   
	int t;
	while(n>0){
   
		t=n%10;
		n=n/10;
		if(t==2||t==0||t==1||t==9)	return 1;
	}
	return 0;
}

int main(){
   
	int n,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++){
   
		if(f(i)==1) sum+=i;
	}
	cout<<sum;
	
	return 0; 
}

这个题的主要思路还是暴力枚举 直接从1到输入的数 然后每一个判断是否包含2.0.1.9 如果包含就返回1 不包含就返回0; 返回1的再用计数器加一 即可;

试题B:既约分数

【问题描述】
如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如,3/4 ,5/2, 1/8,71都是既约分数。请问,有多少个既约分教,分子和分母都是1到2020之间的整数《包括15和和2020》

方法一----暴力求最大公约数

这个方法就是最大公约数 就是这两个数的公共因数;看我的代码;

#include<bits/stdc++.h>
using namespace std;

int ans;

int f(int a,int b){
   
	int t=max(a,b);
	for(int i=t;i>=1;i--){
   
		if(a%i==0&&b%i==0)
		 if(i==1) return 1;
		 else return 0;
	}
	
}

int main(){
   
	
	for(int i=1;i<=2020;i++){
   
		for(int j=1;j<=2020;j++){
   
			if(f(i,j)==1) ans++;
		}
	}
	cout<<ans;
	return 0;
}

一样的暴力 一样的不留余地 一样的简单。

方法二—辗转相除求最大公约数

这个方法主要介绍一下辗转相除求最大公约数

辗转相除法求两个数的最大公约数的步骤如下: 先用小的一个数除大的一个数,得第一个余数; 再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数).
例如求1515和600的最大公约数, 第一次:用600除1515,商2余315; 第二次:用315除600,商1余285;
第三次:用285除315,商1余30; 第四次:用30除285,商9余15; 第五次:用15除30,商2余0.
1515和600的最大公约数是15.
辗转相除法是求两个数的最大公约数的方法.如果求几个数的最大公约数,可以先求两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数.这样依次下去,直到最后一个数为止.最后所得的一个最大公约数,就是所求的几个数的最大公约数.

下面就可以上代码解题了:

#include<bits/stdc++.h>
using namespace std;

int ans;
int f(int a,int b){
   
	if(b==0) return a;
	else f(b,a%b);
}
int main(){
   
	
	for(int i=1;i<=2020;i++){
   
		for(int j=1;j<=2020;j++){
   
			if(f(i,j)==1) ans++;
		}
	}
	cout<<ans;
	return 0;
}

这就是辗转相除法了。是一个非常好的求最大公约数的方法哦!!!

今天就分享这三个蓝桥杯试题了。比较简单,但万丈高楼平地起嘛。只要努力早晚会一飞冲天的!

关于小编

小编是一名大一学生 希望大家能从 一 开始学习。努努力,一起变强为了更好的明天奋斗!!!!
小编的QQ号是:2206730228
欢迎大家来骚扰 一起探讨编程的奥秘。
小编是个农村人 别来欺负小编啥都不懂嗷


转载:https://blog.csdn.net/qq_53711262/article/details/115431658
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场