C++笔记
abs()绝对值
比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。
```c
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
return x % 10 > y % 10;
}
int main(){
int num[10] = {65,59,96,13,21,80,72,33,44,99};
sort(num,num+10,cmp);
for(int i=0;i<10;i++){
cout<<num[i]<<" ";
}//输出结果:59 99 96 65 44 13 33 72 21 80
return 0;
}
```c stable-sor
STL
标准模板库
#include<stack>
stack<int> stk;
创建栈,int类型,叫stk;
stk.push(1)
把一入栈
stk.top()
获取栈顶元素
stk.pop()
出栈
stk.empty()
判断栈是否为空
stk.size()
获取栈中元素的个数
```
```c
void clear(){
top=0;
return;
}
```
清空栈
x%n的范围0~(n-1)数组的最大值是9*10^7
1递推算法
递推算法:是指从已知的初始条件出发,依据某种递推关系,逐次推出所要
求的各中间结果及最后结果。
2.可用递推算法求解的题目一般有以下二个特点:
1、问题可以划分成多个状态;
2、除初始状态外,其他各个状态都可以用固定的递推关系式来表示。
3.递推问题的求解步骤
1建立递推关系式
2确定边界条件
3递推求解
4斐波那契数列
斐波那契数列,又称黄金分割数列、因子学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、213、....在数学上,斐波那契数列以递推的方法定义:
F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)( n>=3)
队列:
是一个线性表
只允许在表的前端(front)删除,在后端(rear)插入。
只允许在队首(front)删除,在队尾(rear)插入。
队列的长度=队尾指针 - 队首指针
STL库队列操作方法
头文件:
```c
#include<queue>
queue<int> q;
q.empty();--判断是否为空
q.size();--队列长度
q.push();--插入元素
q.back();--求队尾
q.front();--求队首
q.pop();--删除队首元素
```
车厢调度
```c
#include<bits/stdc++.h>
using namespace std;
int a[1001];
stack<int> stk;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int t=1;
for(int i=0;i<n;i++){
while(a[i]>=t){
stk.push(t);
t++;
}
if(stk.top()==a[i]){
stk.pop();
}
else{
cout<<"NO";
return 0;
}
}
cout<<"YES";
return 0;
}
```
递归回溯算法框架(深搜)
```c
int Search(int k)
{
for(int i=1;i<=“算符种数”;i++)
{
if(”满足条件“)
{
//保存结果
if(“到达结果“)//输出解
else Search+1;
//恢复:保存结果 b[i]=0
}
}
}
```
二
```c
int Search(int k)
{
if(到目的地)输出解;
else
for(int i=1;i<=算符种数;i++)
{
if(满足条件)
{
保存结果;
Searc(k+1);
//恢复:回溯
}
}
}
```
STL库队列操作方法
头文件:
```c
#include<queue>
queue<int> q;
q.empty();--判断是否为空
q.size();--队列长度
q.push();--插入元素
q.back();--求队尾
q.front();--求队首
q.pop();--删除队首元素
```