蓝桥杯简单模板

目录

最大公约数

两个数的最大公约数

多个数的最大公约数

最小公倍数

两个数的最小公倍数

多个数的最小公倍数

素数

​编辑

位数分离

正写

​编辑

反写

闰年


最大公约数

两个数的最大公约数

之前看见的是辗转相除法,例如现在让算一个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;
}

结果

相关推荐
励志要当大牛的小白菜2 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970442 小时前
力扣 hot100 Day56
算法·leetcode
PAK向日葵3 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
爱喝矿泉水的猛男5 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
YuTaoShao5 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
YouQian7726 小时前
Traffic Lights set的使用
算法
go54631584657 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
图像处理·人工智能·深度学习·神经网络·算法
aramae7 小时前
大话数据结构之<队列>
c语言·开发语言·数据结构·算法
大锦终7 小时前
【算法】前缀和经典例题
算法·leetcode
想变成树袋熊8 小时前
【自用】NLP算法面经(6)
人工智能·算法·自然语言处理