蓝桥杯考试总结汇总

一进考场设置devc快捷键

  1. 设置注释和取消注释快捷键
  2. 设置代码自动补全快捷键
  3. 开启devc调试功能,详细可以看怎么开调试功能https://blog.csdn.net/hz18790581821/article/details/78418648
  4. 比赛过程中,如果不相信自己是否做对,没有把握的,可以打印出过程来检验一下,在有些情况下是有用的。。。千万不能辛辛苦苦做了,居然因为最后一步错了!因为考场是不知道结果的,不能知道结果去验证靠近结果,而是要不断怀疑自己的结果是不是正确的!

注意事项

1、不要能用字符串直接输出的,就不要还用数组来判断,当数据量大的时候就会超时,明明都判断了,可以直接运行了,就不要多此一举放在数据里,因为它只有三个变量,又不是很多,所以完全可以各自单独列出来。

if(s[i] == "Mccree") cout<<"Genji";
else if(s[i] == "Hanzo") cout<<"Mccree";
else              cout<<"Hanzo";

错误示范

if(s[i]==des[0][0]) 	sa[i]=des[1][0];
else if(s[i]==des[0][1]) sa[i]=des[1][1];
else sa[i]=des[1][2];

sprintf()、memset()函数

用来格式化字符串,注意格式化的是字符数组
头文件#include< cstdio>

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	char s[15];
	sprintf(s, "%08d", 123);
	cout<<s<<endl;
	return 0;
}

sprintf(s, “%08d”, 123);可以使得字符串的输出格式为右对齐,以0补齐00000123

memset()函数:
参考学习链接:https://blog.csdn.net/qq_25406563/article/details/83303371?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3

memset(结构体/数组名 , 用于替换的ASCII码对应字符 , 前n个字符 );
memset(结构体/数组名 , "用于替换的字符“ , 前n个字符 );
函数解释:将s中的前n个字节用ch替换并且返回s
函数作用:在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。

注意闰年

闰年判断方法
1.能被4整除而不能被100整除。
2.能被400整除。
平年是365,闰年是366天
闰年229天,平年228

有关日期的,题目很喜欢在2月份埋坑,要特别注意闰年平年

set容器、vector、map容器

构造set集合的主要目的是为了快速检索,使用set前,需要在程序头文件中包含声明“#include< set>”
它不会重复插入相同键值的元素,而采取忽略处理。
而且只要把元素放进set里面去,用for循环读取就可以按序读取
注意:初始化的方法,和输出的方式

//定义set容器,排序、避免冗余 
	set<string>e;
    for(set<string>::iterator it=e.begin();it!=e.end();it++) 
	{
		cout<<"it: "<<*it<<endl;
//		cout<<*it<<endl;

另外,在买不到的糖果数的题目中也有用到set容器

if(s.find(i)==s.end()){//i不在set中,那么i就是答案
			cout<<i<<endl;
			break;//找到后跳出循环 
		}

stl容器set成员函数:find()–返回一个指向被查找到元素的迭代器

另外,在跳蚱蜢的题目中也有用到set容器

set<string> visited;//已经搜索过的局面
if(visited.count(s)==0)//如果没有搜索过这个局面
    {
        visited.insert(s);
    } 

stl容器set成员函数:count()返回集合中某个值元素的个数

set容器用 s.insert(temp);进行元素的插入

跟vector不一样,插入跟查找特定元素不一样

#include <algorithm>
vector<int> vec;
vec.push_back(1);        
vec.push_back(2);        
vector<int>::iterator ret;       
 ret = std::find(vec.begin(), vec.end(), 15);        
 if(ret == vec.end())            
 cout << "not found" << endl;        
 else            
 cout << "found it" << endl;

erase函数

https://blog.csdn.net/leo_csdn_/article/details/82221721

scanf()的好用处

scanf()在头文件#include< cstdio>里,作为有一定格式输入时更好用,如要输入02/03/04,

	int a[3],b[3];
	scanf("%d/%d/%d",&a[0],&a[1],&a[2]);

getline和cin对string的输入

getline(cin,string)读取一行以回车为结束,空格不会当成是结束的
但cin>>string;读取至空格或回车.
所以要每次读取一个单词时候用cin>>string,,即要把空格识别作为结束,所以用cin>>string。

常用的函数及其头文件

  1. strlen()函数,在< cstring>头文件里
  2. CCTYPE函数系列包含了判断是否是字符等函数
  3. sqrt()求平方根函数,atan2()函数可根据x和y的值计算角度。
  4. #include< algorithm> 里面有sort()排序函数
  5. min函数,比较两个数值的大小,返回他们的之间最小值。头文件#include < algorithm>。如 num = min(currentNum, num);
  6. 编程填空题可用的万能头文件#include<bits/stdc++.h>
  7. 绝对值函数 fabs()的头文件 #include< cmath>
  8. 全排列函数 next_permutation(a,a+10)头文件#include < algorithm>
  9. do{ 放置内容…… }while(next_permutation(a,a+10));
    虽然有10个元素,最后一个的下标也是a[9],但是区间的话是[a,a+10),所以还是以元素个数做为加多少的结尾
  10. gcd函数
    gcd(x,y);最大公约数函数
    int、long long类型都可以,需要注意的是两个类型必须要相同,还有不能用浮点型,当然手写gcd函数也是可以的,它头文件是algorithm。

while (cin >> income)问题

double income;
while (cin >> income)

当输入的不是数字的时候,压根不会进入while循环,因为不满足cin >> income的条件。cin>>被用于测试表达式中将根据输入是否成功,被转换为bool值true或false。cin>>将知道输入的如字符那些表示数字,从而将其留在队列中,并返回一个将被转换为false的值,这时while循环将会终止。

#include<iostream>
#include<string>
#include<sstream>
//新学的头文件

using namespace std;
int main(){
	string s;
	while(getline(cin,s)){
		int sum =0,x;
		int count = 0;
		int i = 0;
		stringstream ss(s);//复制字符串s到stringstream ss 
		while(ss>>x)
		{
			sum+=x;
			cout<<"i++: "<<i++<<endl;
		}
		cout<<"count++: "<<count++<<endl;
		cout<<"sum: "<<sum<<endl;
	}
	return 0;
} 

getline (cin, stri)返回cin,cin再转换为bool值true(读入成功)或者false(读入失败),所以此次循环结束的就是按下ctrl+z

要注意类型以及溢出等问题!

有时候不注意int跟double,或者忽略了隐式类型转换,即使声明是double,但也可能被隐式转换为int了

double cal (int x,int y){
	double ave;
//	注意类型转换double,不然x和y会以int 类型进行计算,计算的ave的结果也是int ,不过有2.0跟2的差别 
//	ave = 2.0 * double(x * y) / (x + y);
	ave = 2.0* x * y / (x + y);
//	当乘以的是2的时候是整数,乘以是2.0的时候结果是浮点数 
//	ave = 2* x * y / (x + y);
	return ave;
}

包括一些声明的是long long类型,但是相乘的两个数是long类型,这样子long long就被隐式转换为long了就会溢出!!

STL容器学习

STL容器学习

  • 比如在错误的票据这道题里用了vector模板类,(注意头文件和声明)因为可以不用事先声明大小,而只需要一直把元素v.push_back(x);进去就好,还可以利用sort(v.begin(),v.end());快速的对容器的元素进行排序。还可以通过v.size()知道容器元素数量,然后通过for(int i=1;i<v.size();i++)遍历容器
  • 队列的学习和使用:学习链接
#include<iostream> 
#include<queue>

using namespace std;

int main(){
	queue<string> q;
//	入队,如例:q.push(x); 将x 接到队列的末端。
	q.push("zhangsan");
	q.push("lisi");
	q.push("wangwu");
//	判断队列空,如例:q.empty(),当队列空时,返回true。
	while(!q.empty()){
//		访问队首元素,如例:q.front(),即最早被压入队列的元素。
		cout<<q.front()<<endl;
//		出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
		q.pop();
	}
}

string字符串

查找字串的函数 str.find(subStr1) != string::npos 如果找到了返回string::npos ,subStr1需要是字符串

#include <cstring>//头文件
string str = "abc";
string subStr1 = "bc";
string subStr2 = "cd";
str.find(subStr1); //返回1,第一个匹配的下标
str.find(subStr2); 
//当str.find(subStr1) != string::npos时,说明是子串
//当str.find(subStr1) == string::npos时,说明不是子串
if(str.find(subStr1) != string::npos){
    cout<<"subStr1 是 str 的子串"<<endl;
}

stringstream

可以方便地实现了字符串与数字的互相转化

#include <sstream>//头文件
string i2s(int i){
      stringstream ss;
      string s;
      //把数字i存到ss中
      ss<<i;
      //把ss中有的转换为字符串s
     ss>>s;
     return s;
}

涉及到多位数字相乘之类的

要把一个多位数看出多个位的单位数组成,用

for(int i=1;i<=9;i++)
        for(int j=0;j<=9;j++)
           for(int k=0;k<=9;k++)
                for(int l=0;l<=9;l++){

而不是

for(int x=1;x<=999;x++)
	for(int y=1;y<=999;y++)

比如在排他平方数里也是这样子。
有几位数就会用到几个for循环,比如四位数,用四个for循环,找出四个数,之后再用*1000,*100,*10之类的变成几千几百几十的数

编程题技巧

  1. 认真读题,认真分析题目,不要害怕
  2. 编程大题如果不会,千万不要放弃!因为有很多测试用例,可以暴力保证一些用例的测试是对的!这样子能赚一点分,能赚一点是一点!要有多拿一分是一分的想法,不能放弃掉!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值