蓝桥杯简单模板

目录

最大公约数

两个数的最大公约数

多个数的最大公约数

最小公倍数

两个数的最小公倍数

多个数的最小公倍数

素数

​编辑

位数分离

正写

​编辑

反写

闰年


最大公约数

两个数的最大公约数

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

结果

相关推荐
水木兰亭41 分钟前
数据结构之——树及树的存储
数据结构·c++·学习·算法
June bug1 小时前
【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
经验分享·分布式·职场和发展·架构·学习方法·测试·软考
Jess072 小时前
插入排序的简单介绍
数据结构·算法·排序算法
老一岁2 小时前
选择排序算法详解
数据结构·算法·排序算法
xindafu2 小时前
代码随想录算法训练营第四十二天|动态规划part9
算法·动态规划
xindafu2 小时前
代码随想录算法训练营第四十五天|动态规划part12
算法·动态规划
ysa0510302 小时前
Dijkstra 算法#图论
数据结构·算法·图论
一定要AK3 小时前
2025—暑期训练一
算法
一定要AK3 小时前
贪心专题练习
算法
森焱森4 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机