蓝桥杯
1.省赛 初始 4h 决赛 4h
题型:填空题 不全代码 代码题
注意要输出 return 0; #include 不要用auto
2.sort
#include<algorithm> //sort 排序加头文件
sort(数组名+开始排序数组下标,数组名+最后一个下标加一,排序函数(默认从小到大))
sort(a,a+n); cmp->从大到小greater<int>()
#include<iostream>
#include<algorithm> //记得一定要加这个头文件
using namespace std;
//需要排序的数组
int arr[]={56,45,343,465,5468754,465,324,365,465,3214};
int main(){
//从第一个到第10个 前面是数组下标 后面要加一[0,10) 如果greater<int>()不写就是从小到大
sort(arr,arr+10,greater<int>());
//数组输出
for(int i=0;i<10;i++){
cout<<arr[i]<<' ';
}
system("pause");
return 0;
}
2.2sort自定义排序
struct s{
int x,y,z;
};
//你想先排x小到大在y小到大
bool cmp(s x,s y){
if(x.x!=y.x) return x.x<y.x;
else if(x.y!=y.y) return x.y<y.y;
else reurn x.z<y.z;
}
int main(){
sort(数组+m,数组+n,cmp);
}
2.3结构体初始值(个人感觉没什么用)
struct student{
int score;
string name;
//初始话结构体
student(string n,int s){
name=n;
score=s;
}
};
2.3.1 结构体默认构造函数
struct student {
int score;
string name;
//默认其为0
student(){}
//不可以同时出现
student (){
score=0;
name='';
}
};
2.3.2初始化列表
struct student {
int score;
string name;
student() {}//注意默认构造函数不可以少
student(string n,int s): name(n),score(s) {}//注意{}要写
//初始化其为name=n,score=s;
};
ex:
//输出三人姓名与成绩
// a 100 b 98 c 99
#include<iostream>
#include<string>
using namespace std;
struct student{
int score;
string name;
student (){};
student(int a,string b):score(a),name(b){}
//or
/*student(int a,string b){
score=a;
name=b;
}*/
}std[3];
int main(){
int i=3;
while(i--){
int a;
string b;
cin>>b>>a;
std[i]=student(b,a);
}
for(int i=0;i<3;i++){
cout<<std[i].name<<' '<<std[i].score<<endl;
}
system("pause");
return 0;
}
3.stl (容器,算法,迭代器)
迭代器 : 指针
stl::iterator p=stl.begin()
vector<int> v;
vector<int> :: iterator pbegin=v.begin(); //相当于一个指针pbegin指向v[0]
3.1 vector
-
叫单端数组(只可以在一边操作),动态数组
//主要操作 v.push_back() v.pop_back() v.begin()//数组下标为0 v.rbegin()//数组下标n-1 v.end()//数组下标n 不是n-1 v.rend()//数组下标-1 v.insert() v.erase()
3.1.1 vectot初始化
vector<int> v;//默认初始化
int arr[]={1,34,34,643,653,153,654326};
vector<int> v(arr,arr + sizeof(arr)/sizeof(int));
//初始化为1
vector<int> v(n,1);
3.1.2 vector 遍历
//用for循环
for(vector<int>:: iterator it=v.begin();it!=v.end();it++){
cout<<*it<<' ';
}
//用for_each 调用#include<algorithm>
//只可以用PrintVector函数
void PrintVector(typename a){
cout<<a<<' ';
}
for_each(v.begin(),v.end(),PrintVector)
for(int i=0;i<n;i++){
cout<<v[i]<<' ';
}
cout<<endl;
3.1.3 vector
//修改里面元素
v[i]=k;
v.pop_back();//删除最后一个元素
v.clear()//清空 空间不会清理
vector<vector<int> > v(n, vector<int>(m,0));//n*m 个0
3.2 集合
#include<set>
set<typename> s;
//插入
s.insert(data);
//删除data
s.erase(data)
//data数量
s.count(data)
//集合遍历
for(set<typenaem>::iterator it=s.begin();it!=s.end();it++){
cout<<*it<<' ';
}
cout<<endl;
//set 默认从小到大
//清空
s.clear()
//结构体->排序set(无法自动排序)
struct student{
int x,y;
bool operator<(const student &rhs) const{
if(x==rhs.x)
return y<rhs.y;
else return x<rhs.x;
}
};
3.3映射 key->value
#include<map>
#include<utility> //make_pair
map<typename,typename> m;
//插入
m.insert(make_pair("data1","data2"));
// or
m["data1"]=data2;
//访问
m["data1"]
//判断是否存在
m.count("data1")
//遍历
for(map<typename,typename>::iterator it=m.begin();it!=m.end();it++){
cout<<it->first<<' '<<it->second<<endl;
}
//清空
m.clear();
//长度
m.size();
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<string>
using namespace std;
map<string,int> m;
int main(){
m["tom"]=1;
m["jone"]=2;
m["mary"]=1;
if(m.count("mary")) cout<<m["mary"]<<endl;
m["mary"]=3;
for(map<string,int>::iterator it=m.begin();it!=m.end();it++){
cout<<it->first<<' '<<it->second<<endl;
}
system("pause");
return 0;
}
4 stack (栈)
#include<stack>
stack<typename> s;
//插入
s.push(data);
//取栈顶
s.top();
//删除栈顶元素
s.pop();
//栈的大小
s.size();
//栈是否为空
s.empty();
//栈的遍历
while(s.size()){//while(!s.empty()){
cout<<s.top()<<' ';
s.pop();
}
5 queue
#include<queue>
queue<typename> q;
//插入
q.push(data);
//
6 递归
//O(2^n)
// test 5 3
// answer
// 1 2 3
// 1 2 4
// 1 2 5
// 1 3 4
// 1 3 5
// 1 4 5
// 2 3 4
// 2 3 5
// 2 4 5
// 3 4 5
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,q[N];
bool book[N];
void dfs(int step,int s){
if(step==m) {
for(int i=0;i<m;i++){
cout<<q[i]<<' ';
}
cout<<endl;
return;
}
for(int i=s;i<=n;i++){
if(!book[i]){
book[i]=1;
q[step]=i;
dfs(step+1,i+1);
book[i]=0;
}
}
}
int main(){
cin>>n>>m;
dfs(0,1);
system("pause");
return 0;
}
//test 3
//answer
// 1 2 3
// 1 2
// 1 3
// 1
// 2 3
// 2
// 3
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n;
bool q[N];
void dfs(int step){
if(step==n){
for(int i=0;i<n;i++){
if(q[i]) cout<<i+1<<' ';
}
cout<<endl;
return;
}
q[step]=1;
dfs(step+1);
q[step]=0;
dfs(step+1);
}
int main(){
cin>>n;
dfs(0);
system("pause");
return 0;
}
// test 3
//answer
// 123
// 132
// 213
// 231
// 312
// 321
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,q[N];
bool book[N];
void dfs(int step){
if(step==n){
for(int i=0;i<n;i++){
cout<<q[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(!book[i]){
book[i]=1;
q[step]=i;
dfs(step+1);
book[i]=0;
}
}
}
int main(){
cin>>n;
dfs(0);
system("pause");
return 0;
}
st int N=1010;
int n,q[N];
bool book[N];
void dfs(int step){
if(step==n){
for(int i=0;i<n;i++){
cout<<q[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(!book[i]){
book[i]=1;
q[step]=i;
dfs(step+1);
book[i]=0;
}
}
}
int main(){
cin>>n;
dfs(0);
system("pause");
return 0;
}