蓝桥杯简单模板

简介: 蓝桥杯简单模板



最大公约数

两个数的最大公约数

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

#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;

加上过程的打印:

#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;
 }

运行结果如下图:

多个数的最大公约数

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

#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;
 }

最小公倍数

两个数的最小公倍数

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

#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;
 }

多个数的最小公倍数

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

#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和他本身的数

#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;
 }

结果如下

位数分离

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

正写

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

#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;
  
}

结果如下

反写

根据模的特点

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

结果如下

闰年

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

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

#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;
}

结果

相关文章
|
11月前
|
人工智能 BI
|
11月前
|
机器学习/深度学习 人工智能 移动开发
|
11月前
|
机器学习/深度学习 人工智能 移动开发
|
存储 机器学习/深度学习 算法
【第十四届蓝桥杯考前速成】必考知识点及代码模板总结,看完至少多拿50分
四、简单图论 1、单源最短路径 2、多源最短路 3、最小生成树 五、动态规划 1、0-1背包 2、完全背包 3、多重背包 4、线性DP 总结
111 0
|
存储 机器学习/深度学习 人工智能
【第十四届蓝桥杯考前速成】必考知识点及代码模板总结,看完至少多拿50分
文章目录 写在前面 一、年份日期问题 1、闰年判定 2、月份天数 二、简单算法 1、前缀和 2、差分 3、二分 4、并查集 二、简单数论 1、质数判定 2、筛质数 3、进制转换 (1)其他进制转十进制 (2)十进制转其他进制 4、保留小数 5、最大公约数 6、最小公倍数 7、快速幂 三、常用STL 1、string 2、vector 3、queue/priority_queue 4、stack 5、set/multiset 6、map/multimap 7、unordered_set/unordered_map 8、pair<int,int> 9、algorithm
302 0
蓝桥杯之单片机学习(三十)——模板罗列、技巧总结与心得
蓝桥杯之单片机学习(三十)——模板罗列、技巧总结与心得
159 0
蓝桥杯之单片机学习(二十四)——自写模板库
蓝桥杯之单片机学习(二十四)——自写模板库
106 0
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))
174 0
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))