蓝桥杯简单模板

目录

最大公约数

两个数的最大公约数

多个数的最大公约数

最小公倍数

两个数的最小公倍数

多个数的最小公倍数

素数

​编辑

位数分离

正写

​编辑

反写

闰年


最大公约数

两个数的最大公约数

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

结果

相关推荐
hold?fish:palm1 分钟前
45 二叉树的右视图
开发语言·c++·算法
粤鼎恒业25 分钟前
惠州工厂电子料回收厂家推荐:从交接单反推筛选标准
大数据·数据库·算法·硬件架构·硬件工程·pcb工艺·材料工程
小爷毛毛(卓寿杰)1 小时前
【Agent 意图识别】输出协议、评估与置信度
人工智能·算法·大模型·prompt·大语言模型·agent
优质酸酸乳1 小时前
力扣100题之21合并两个有序链表
算法·leetcode·链表
旖旎夜光1 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
旋生万物1 小时前
Agent System Prompt 注入螺旋公理:让 AI 推理不跑偏的可复制模板(附完整 Prompt)
人工智能·算法
深圳雨林凯AI1 小时前
图案裂变的空间关系原理:元素放大为何必然挤压负空间,以及三个可调变量|雨林凯AI技术拆解
人工智能·算法
tellmewhoisi2 小时前
机器学习:聚类算法
算法·机器学习·聚类
yi0112 小时前
LeetCode 134 加油站:从 双循环暴力 演变到 贪心
linux·算法·leetcode
sogw-三叶草️2 小时前
LeetCode 989. 数组形式的整数加法
数据结构·算法