2022备战蓝桥杯 -- 笔记

小白是如何一个月备考蓝桥杯的?

我是报的C++ B组,有部分C语言基础,看B站黑马程序员学的C++,跟着y总学语法基础和蓝桥杯辅导课。

总之,学好语法基础,多刷题,多刷题!

之后多看看历年考题,从里面学习算法基础,时间充分的话,看看数论,学习其他算法思想。

动态规划,暴力搜索,贪心,递归,排序,查找... ...必备的算法基础,多刷相关习题,建议一个专题一个专题的练习。

1.#include 万能开头

2.做题时,要找到 本质

例如,比较三0只小猪哪个最重? 实质上是 比较三个数,哪个最大?

3.常用的头文件

  1. #include 万能开头
  2. #include sort 函数
  3. #include printf scanf
  4. #include 字符串
  5. #include sqrt

4.函数最大值调用

int get_max(int x , int y)
{
    int z = 0;
    if(x > y)
        z = x;
    else
        z = y;
    return z;
}
 
int main()
{
    int a = 10;
    int b = 20;
    //函数的调用
    int max = get_max(a,b);
    //输出
    printf("max = %d\n",max);
    return 0;
}

5.递归

递归必须  边界(出口)
例如:用递归求 n!

int fact(int n)
{
if(n==1) return 1;
return n*fact(n-1);
}
int main()
{
int n;
cin>>n;
cout<

递归:

递归的三个要素:

1.找重复点(重复——相似——规模变小)

2.找变化

3.找出口

把问题简单化,化成一个一个小问题,抽象成数学模型,再逐步复杂化

//递归函数
void 递归函数(参数列表)
{
	if(结束条件)//满足后执行下列语句,结束当前函数并返回
	{
          //执行函数体,结束函数前该干的事情
	}
	else{
          //执行函数体,满足当前操作
          //改变参数,进行下次操作
	}
}

这篇博客写的很 nice,简单易懂,适合新手

蓝桥杯——我该如何枚举_〖雪月清〗的博客-CSDN博客

6.交换两个数

#include  usingnamespacestd;

int main()

{

    int a = 5, b = 10, temp;

    cout << "交换之前:" << endl;

    cout << "a = " << a << ", b = " << b << endl;

    temp = a;

    a = b;

    b = temp;

    cout << "\n交换之后:" << endl;

    cout << "a = " << a << ", b = " << b << endl;

    return 0;

}

7.添加随机数种子

srand

#include        头文件

int main()
{
    srand((unsigned int) time(NULL));
}

水仙花数 : a * a * a + b * b * b + c * c * c==num

8.C++里面 两个函数相互调用

定义和声明可以分开的。先声明两个函数,然后再后面再写函数体就可以了。比如

// 声明

void A();

void B();

//调用

void A()

{

B();

return;

}

void B()

{

A();

return;

}

9.求两个数的最大值:

  1. 用max函数

int max(int a,int b)
{
    return a>b?a:b;
}

2.用if来判断

要求出最大值:

int main( )
{
    int a,b,temp;
    if(a>b)
    {
        temp=a;
        a=b;
        b=temp;
    } // 得出最大值,让最后的b为最大值
}

10.求最大值函数:

#include
#include
#include
using namespace std;
int a,b;

int max(a,b)
{
     return a>b?a:b;
}



取根号 函数    sqrt(r*r-y*y)

11.sort函数 升序降序

1.sort函数包含在头文件为#include 的c++标准库中。

2.sort函数的模板有三个参数:

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

(1)第一个参数first:是要排序的数组的起始地址。

(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)

(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。

当需要排序自己需要的类型时,可以重定义compare函数。

例如自定义从大到小排序:

#include
#include
using namespace std;
bool compare(int a,int b);
main(){
  //sort函数第三个参数自己定义,实现从大到小 
  int a[]={47,12,34,17,92,11,28,4,25,25};
  sort(a,a+10,compare);
  for(int i=0;i<10;i++)
    cout<b;           // 降序,从大到小
}

关于return 那件小事

1、 return;是正确的,用于void函数的返回,它不返回任何值,但是可以用于在void即返回值为空的函数中在任意点结束该函数

2、return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。
return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;

比赛开始前两天,看看骗分技巧

蓝桥考试注意事项:

1.excel 的用法:

计算日期相隔的天数、月数、年数

2022备战蓝桥杯 -- 笔记_第1张图片

2022备战蓝桥杯 -- 笔记_第2张图片

计算某一天星期几:

2022备战蓝桥杯 -- 笔记_第3张图片

WEEKDAY( 要计算的日期所在的列数 , 2)

2.进制

KB MB 字节 字 二进制位数

字节的关系:

1 字节(byte)= 8 位二进制数

1 KB=1024 B

1MB=1024 KB

1GB=1024MB

3.计算器

(可求进制,可求日期)

2022备战蓝桥杯 -- 笔记_第4张图片

进制:

2022备战蓝桥杯 -- 笔记_第5张图片

4.辗转相除法求最大公约数

闰年:

判断是否是闰年有两种情况:

(1)year%400==0

(2)(year%4==0)&&(year%100!=0)

bool rn(int year){
	 if((year%400==0)||(year%4==0)&&(year%100!=0))
	 	return true;
	 return false;
}

素数、质数

#include 
int main() {
    int n;
    printf("请输入一个1-100之间的整数:\n");
    scanf("%d", &n);
    
    
    int m = 0;
    for (int i = 2; i < n; i++ ) {
        if(n % i  == 0) {
            m++;
        }
    }
    if (m == 0) {
        printf("%d是素数\n", n);
    } else {
        printf("%d不是素数\n", n);
    }
    
    return 0;
}
 
  

排序

一般情况下,在考试中我们尽量使用algorithm中的——sort

#include
#include      -- sort 函数的头文件
using namespace std;
int main() {
	int a[10] = { 1,3,4,2,5,6,7,9,8,0 };
	sort(a, a + 10);
	for (int i = 0; i < 10; i++) {
		cout << a[i] << " ";
	}
	return 0;
}

有数据范围反推算法复杂度计算法内容:

2022备战蓝桥杯 -- 笔记_第6张图片

Y总 总结的,超棒!

一个公式:

p q

xp+yq 都为整数

p q 为正整数,那么不能凑出的最大整数为 (p-1)*(q-1)-1

杂记

数组下标不能为负值, 如果需要的话,可以用偏移量

前缀和

差分

双指针

哈希 unorder_map

一起考

星期 日期

并查集

背包问题

搜索 dfs bfs

环图 每一点度数是 2 深度优先遍历+栈

最短路 背模板

骗分

线类型 dp : 最长公共子序列 最长上升子序列

区间序列 先枚举长度 再枚举左端点

打暴力

贪心: 加油站((acwing1088) 旅行问题 一个环上有很多加油站) 货舱选址 哈夫曼编码

约瑟夫问题 dp

《骗分导论》

数组,for循环,while 循环,if语句,sort 升序降序,随机数种子,

输入和输出:printf 和 scanf 比 cout 和cin 要快

#define 语句后面 没有分号 例如: #define Day 7

当有浮点数时,最好用 double #include printf scanf

还在更新中... ...

如有错误,欢迎读者指正!

你可能感兴趣的:(C++,蓝桥杯,笔记,c++,算法)