C++筆記
abs()絕對(duì)值
比如說(shuō)我們按照每個(gè)數(shù)的個(gè)位進(jìn)行從大到小排序,我們就可以根據(jù)自己的需求來(lái)寫一個(gè)函數(shù)作為排序的準(zhǔn)則傳入到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]<<" ";
}//輸出結(jié)果:59 99 96 65 44 13 33 72 21 80
return 0;
}?
```c? ? ? ? ? ? ? ? ? ? ? ?stable-sor
STL
標(biāo)準(zhǔn)模板庫(kù)
#include<stack>
stack<int> stk;
創(chuàng)建棧,int類型,叫stk;
stk.push(1)
把一入棧
stk.top()
獲取棧頂元素
stk.pop()
出棧
stk.empty()
判斷棧是否為空
stk.size()
獲取棧中元素的個(gè)數(shù)
?```
```c
void clear(){
top=0;
return;
}
? ```
清空棧
x%n的范圍0~(n-1)數(shù)組的最大值是9*10^7
? 1遞推算法
遞推算法:是指從已知的初始條件出發(fā),依據(jù)某種遞推關(guān)系,逐次推出所要
求的各中間結(jié)果及最后結(jié)果。
? 2.可用遞推算法求解的題目一般有以下二個(gè)特點(diǎn):
? 1、問(wèn)題可以劃分成多個(gè)狀態(tài);
? 2、除初始狀態(tài)外,其他各個(gè)狀態(tài)都可以用固定的遞推關(guān)系式來(lái)表示。
? 3.遞推問(wèn)題的求解步驟
? ? ? 1建立遞推關(guān)系式
? ? ? 2確定邊界條件
? ? ? 3遞推求解
? ? ? 4斐波那契數(shù)列
? 斐波那契數(shù)列,又稱黃金分割數(shù)列、因子學(xué)家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”,指的是這樣一個(gè)數(shù)列:1、1、2、3、5、8、13、213、....在數(shù)學(xué)上,斐波那契數(shù)列以遞推的方法定義:
? F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)( n>=3)
? 隊(duì)列:
?是一個(gè)線性表
只允許在表的前端(front)刪除,在后端(rear)插入。
只允許在隊(duì)首(front)刪除,在隊(duì)尾(rear)插入。
隊(duì)列的長(zhǎng)度=隊(duì)尾指針 - 隊(duì)首指針
??
??
??
STL庫(kù)隊(duì)列操作方法
頭文件:
```c
#include<queue>
queue<int> q;
q.empty();--判斷是否為空
q.size();--隊(duì)列長(zhǎng)度
q.push();--插入元素
q.back();--求隊(duì)尾
q.front();--求隊(duì)首
q.pop();--刪除隊(duì)首元素
```
車廂調(diào)度
?```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<=“算符種數(shù)”;i++)
{
if(”滿足條件“)
{
//保存結(jié)果
if(“到達(dá)結(jié)果“)//輸出解
else Search+1;
//恢復(fù):保存結(jié)果 b[i]=0
}
? }
}
```? ? ? ? ? ? ? ? ? ? ? ? ? ?
二
```c
int Search(int k)
{
if(到目的地)輸出解;
else
for(int i=1;i<=算符種數(shù);i++)
{
if(滿足條件)
{
保存結(jié)果;
Searc(k+1);
//恢復(fù):回溯?
}?
}?
}
```
STL庫(kù)隊(duì)列操作方法
頭文件:
```c
#include<queue>
queue<int> q;
q.empty();--判斷是否為空
q.size();--隊(duì)列長(zhǎng)度
q.push();--插入元素
q.back();--求隊(duì)尾
q.front();--求隊(duì)首
q.pop();--刪除隊(duì)首元素
```