總體來說,最近一年的題,難易程度簡單偏中等。
題總共分為五大類,分別是字元,排序,查詢,演算法題,其中二叉樹單獨拿出來考的
難易程度:百分之80屬於簡單題的範疇,剩下的屬於運氣題——————————。
一.字串
經常考的題有:(字串比較,字串拼接,字串排序,是否為公共子串,字串翻轉,字串重排;)
字串類的題就直接用map函式就行,剩下的百分之2.5的題用for迴圈輸出結果就可以;
二.排序類
經常考的題有:(K個字母組合,問第幾個字元或者數字,小朋友按照身高體重排序;)
三.查詢類
經常考的題有:(查詢中位數,小朋友查詢身高體重;)
四.演算法題(BFS,DFS;)
經常考的題有:(對角線上人數,迷宮,最優規劃,揹包問題;)
上面是幾類高頻的考試內容,以下是考試常用的幾個函式 **
1.getline 函式,此函式可讀取整行,包括前導和嵌入的空格,並將其儲存在字串物件中。
當 cin 讀取資料時,一旦它接觸到第一個非空格字元即開始閱讀,當它讀取到下一個空白字元時,它將停止讀取。
getline(cin, inputLine); 舉例: getline(cin, name);
2.sort函式,包含在標頭檔案為#include
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b);
main(){
//sort函式第三個引數自己定義,實現從大到小
int a[]={45,12,34,77,90,11,2,4,5,55};
sort(a,a+10,cmp);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
//自定義函式
bool cmp(int a,int b){
return a>b;
}
3.substr函式,返回一個string,包含s中從pos開始的n個字元的拷貝(pos的預設值是0,n的預設值是s.size() - pos,即不加引數會預設拷貝整個s)
#include<string>
#include<iostream>
using` `namespace` `std;
int` `main()
{
string s(``"12345asdf"``);
string a = s.substr(0,5); ``//獲得字串s中從第0位開始的長度為5的字串
cout << a << endl;
}
4.atoi函式,轉化的是char[],c++標準庫中字串轉化為int的函式。
int i_dec = std::stoi (str_dec,&sz);
int i_hex = std::stoi (str_hex,nullptr,16);
int i_bin = std::stoi (str_bin,nullptr,2);
int i_auto = std::stoi (str_auto,nullptr,0);
std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";
std::cout << str_hex << ": " << i_hex << '\n';
std::cout << str_bin << ": " << i_bin << '\n';
std::cout << str_auto << ": " << i_auto << '\n'
5.c_str()。標準庫的string類成員函式,從一個string得到c型別的字元陣列
#include <iostream>
//需要包含cstring的字串
#include <cstring>
using namespace std;
int main()
{
//string-->char*
//c_str()函式返回一個指向正規C字串的指標, 內容與本string串相同
//這個陣列的資料是臨時的,當有一個改變這些資料的成員函式被呼叫後,其中的資料就會失效。
//因此要麼現用先轉換,要麼把它的資料複製到使用者自己可以管理的記憶體中
const char *c;
string s = "1234";
c = s.c_str();
cout<<c<<endl;
s = "abcde";
cout<<c<<endl;
}
6.sscanf,sscanf()函式用於從字串中讀取指定格式的資料, int sscanf (char *str, char * format [, argument, ...]);
引數str為要讀取資料的字串;format為使用者指定的格式;argument為變數,用來儲存讀取到的資料。
成功則返回引數數目,失敗則返回-1,錯誤原因存於errno 中。
sscanf()會將引數str 的字串根據引數format(格式化字串)來轉換並格式化資料(格式化字串請參考scanf()), 轉換後的結果存於對應的變數中。
sscanf()與scanf()類似,都是用於輸入的,只是scanf()以鍵盤(stdin)為輸入源,sscanf()以固定字串為輸入源。
#include <stdio.h>
int main(void)
{
char str[100] ="123568qwerSDDAE";
char lowercase[100];
int num;
sscanf(str,"%d %[a-z]", &num, lowercase);
printf("The number is: %d.\n", num);
printf("The lowercase is: %s.", lowercase);
return 0;
}
常考的遍歷方法:
dfs和bfs
遞迴和動態規劃的區別
相同點:
遞迴與動態規劃是兩個十分基本的演算法,它們使用的思路都是分而治之,將一個大問題拆解成一個小問題。
不同點:
1.遞迴是從上而下(從大問題到小問題),而動態規劃是由下而上(先解決小問題最後到大問題);
2.動態規劃會儲存每個小問題的結果,從而它的計算速度會比遞迴要快。(代價是動態規劃的空間複雜度更高,即用空間換取的時間)。
3.動態規劃是用遞迴實現的,遞迴是用函式實現的。
————————————分割線—————————————
需要學習知識點的題
5.寫出一個程式,接受一個十六進位制的數,輸出該數值的十進位制表示。
#include<iostream>
using namespace std;
int main(){
string a;
while(getline(cin,a)){
int res=0;
int pos=a.find('x');
for(int i=pos+1;i<a.size();++i){
int tmp=0;
if(a[i]>='A'&&a[i]<='F'){
tmp=10+(a[i]-'A');
}
else{
tmp=a[i]-'0';
}
res=res*16+tmp;
}
cout<<res<<endl;
}
return 0;
}
需要知道十進位制轉為十六進位制的原理:十六進位制數從低位到高位(即從右往左)計算,第0位的權值是16的0次方,第1位的權值是16的1次方,第2位的權值是16的2次方,依次遞增下去,把最後的結果相加的值就是十進位制的值了。
十六進位制就是逢16進1,十六進位制的16個數為0123456789ABCDEF。
例:將十六進位制的(2B)H轉換為十進位制的步驟如下:
\1. 第0位 B x 16^0 = 11;
\2. 第1位 2 x 16^1 = 32;
\3. 讀數,把結果值相加,11+32=43,即(2B)H=(43)D。
具體其他進位制相互轉換,請看大神部落格:
https://www.cnblogs.com/gaizai/p/4233780.html#_labelConvert13