蓝桥杯笔记

蓝桥杯

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;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值