蓝桥杯简单模板

目录

最大公约数

两个数的最大公约数

多个数的最大公约数

最小公倍数

两个数的最小公倍数

多个数的最小公倍数

素数

​编辑

位数分离

正写

​编辑

反写

闰年


最大公约数

两个数的最大公约数

之前看见的是辗转相除法,例如现在让算一个49,21的最大公约数

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	int a=49,b=21;
	while(b!=0)
	{
		int tmp=b;
		b=a%b;
		a=tmp;
	}
	cout<<a;
	return 0;
 } 

模拟一下过程

刚开始a=49,b=21,循环判断b不等于0,进入循环,tmp=21,b=a%b=49%21=7,a=tmp=21;

现在a=21,b=7,循环判断b不等于0,进入循环,tmp=7,b=a%b=21%7=0,a=tmp=7;

现在a=7,b=0,循环判断b不等于0,循环结束;

打印a=7;

加上过程的打印:

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	int a=49,b=21;
	cout<<"a="<<a<<",b="<<b<<endl;
	while(b!=0)
	{
		int tmp=b;
		b=a%b;
		a=tmp;
		cout<<"a="<<a<<",b="<<b<<endl;
	}
	cout<<endl<<a;
	return 0;
 } 

运行结果如下图:

多个数的最大公约数

可以先把前两个数的最大公约数求出来之后,在依次和剩下的数进行辗转相除,求出一组数的最大公约数

cpp 复制代码
#include<iostream>
using namespace std;
int gcd(int a,int b);
int gcd(int a,int b)
{
	while(b!=0)
	{
		int tmp=b;
		b=a%b;
		a=tmp;
	}
	return a; 
}
int main()
{
	int arr[4]={5,75,80,2000};
	int num=arr[0];
	for(int i=1;i<4;i++)
	{
		num=gcd(num,arr[i]);
	}
	cout<<num;
	return 0;
 } 

最小公倍数

两个数的最小公倍数

最小公倍数数的求法,一般是将两个数相乘,然后除两个数的最大公约数,下面是具体代码:

cpp 复制代码
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
	while(b!=0)
	{
		int tmp=b;
		b=a%b;
		a=tmp;
	}
	return a; 
}
 int main()
 {
 	int a=21,b=7;
 	cout<<a*b/gcd(a,b)<<endl;
 	return 0;
 }

多个数的最小公倍数

也是同求多个数的最大公约数一样,先求出前两个的最小公倍数,然后依次于剩下的数求出整个数组的最小公倍数。代码如下:

cpp 复制代码
#include<iostream>
using namespace std;
int gcd(int a,int b);
int gcd(int a,int b)
{
	while(b!=0)
	{
		int tmp=b;
		b=a%b;
		a=tmp;
	}
	return a; 
}
int main()
{
	int arr[4]={50,100,10,20};
	int num=arr[0];
	for(int i=1;i<4;i++)
	{
		num=num*arr[i]/gcd(num,arr[i]);
	}
	cout<<num;
	return 0;
 } 

素数

因数只有1和他本身的数

cpp 复制代码
 #include<iostream>
 using namespace std;
 bool isprime(int n)
 {
 	for(int i=2;i*i<n;i++)
 	{
 		if(n%i==0)return false;
	}
	 return true;
 }
 int main()
 {
 	for(int i=2;i<100;i++)
 	{
 		if(isprime(i))printf("%d\t",i);
	}
	return 0;
 }

结果如下

位数分离

有时候会给一些数,然后让分离每个位数的数字,有时候是正写,有时候是反写

正写

正写老师教过递归的写法,但是有些不熟练,我这里的方法是先统计这个数是几位数,然后依次除。

cpp 复制代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int a=12345678;
	int num=a;//用来统计位数
	int t=0;
	while(num) 
	{
		num/=10;
		t++;
	}
	while(t)
	{
		t--;
		int i=a/pow(10,t);
		a=a-i*pow(10,t);
		cout<<i<<' ';
		
	}
	 return 0;
	
} 

结果如下

反写

根据模的特点

cpp 复制代码
 #include<iostream>
 using namespace std;
 int main()
 {
 	int a=12345678;
 	while(a)
 	{
 		cout<<a%10<<' ';
		 a/=10;  
	}
	return 0;
 }

结果如下

闰年

不是百年的时候,每四年一闰,

是百年的时候,四百年一闰

cpp 复制代码
#include<iostream>
using namespace std;
bool leap(int year)
{
	if(year%400==0||year%100!=0&&year%4==0)return true;
	return false;
	
}
int main()
{
	for(int i=1;i<1000;i++)
	{
		if(leap(i))printf("%d\t",i);
	}
	return 0;
}

结果

相关推荐
jiao000011 小时前
数据结构——队列
c语言·数据结构·算法
迷迭所归处3 小时前
C++ —— 关于vector
开发语言·c++·算法
leon6253 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林3 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z3 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼4 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
天玑y4 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
自陈4 小时前
蓝桥杯嵌入式客观题合集
蓝桥杯·蓝桥杯嵌入式客观题
sjsjs114 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
redcocal4 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘