欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【PAT乙級】一百一十道真題刷后大匯總——C/C++-創(chuàng)新互聯(lián)

技巧總結
  • 避免精度丟失
  • 查詢數(shù)據(jù)是否存在
  • 容器之間的比較是否相等
  • 緩存區(qū)中字符殘留問題
  • 巧妙輸入
  • 巧妙使用hash數(shù)組
  • 簡單數(shù)學
    • 質數(shù)
    • 倆數(shù)大公約與最小公倍
    • 數(shù)因子
  • 常用的頭文件及其內部函數(shù)
    • < map >
    • < set >
    • < pair >
    • < string >
    • < vector >
    • < algorithm >
    • < cctype >
    • < iomanip >

新河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
避免精度丟失

所有的計算最后都是轉換成二進制進行計算的,所以浮點計算時候,有時會出現(xiàn)精度流失的問題。
解決方法:
盡量轉換成long型計算,最后再換成浮點型輸出結果。

刷題時候測試點也不一定會考察這方面,但當很多個浮點型數(shù)據(jù)運算時候丟失精度就更明顯了。當題目中告訴我們每個數(shù)的小數(shù)點最高幾位的時候,我們還是最好先轉換成long型最后再換回來,這樣更為準確。

查詢數(shù)據(jù)是否存在

如果可以在set和map中進行查詢find,就別在vector容器中查詢用find,因為vector中的find的algorithm的find,時間復雜度是O(n),而set和map是自帶的函數(shù),內部結構是紅黑樹。
但是如果是set和map的話,用count就可以了,因為他們內部都不是重復的。時間復雜度和find一樣是(logn);
用map.count(key)是否大于0查找數(shù)據(jù)應該是用的比較多的。

容器之間的比較是否相等

有時需要把答案放在容器內,然后把所寫的放另一個容器里,比較是否與答案相等,這個時候就有必要用到容器之間是否相等。
容器之間比較內部所有元素是否相等,可以直接用**==**
如果兩個容器的長度相同且對應位置元素都相等,則兩個容器就相等,否則不等。
在這里插入圖片描述
Java中重寫equals后用equals方法有點像。

緩存區(qū)中字符殘留問題

使用cin輸入數(shù)據(jù)后,會殘留空格或者回車符在緩存區(qū)中;
使用getline輸入數(shù)據(jù)后,不會有回車在緩存區(qū)中。

#include#includeusing namespace std;

int main(){char ch;
string s,s1;
cin >>s;
getline(cin,s1);

cout<< s<< endl;
cout<< s1<< endl;
}
輸入:
a b
輸出:
a
 b
輸入:
 ab

輸出:
ab

出現(xiàn)需要處理字符的原因:
是因為cin遇到空格或者回車字符時,是作為結束符的,但是其本身還是存留在緩沖中,遇到要么作為結束符要么就是直接跳過。既然在緩沖中,如果不需要就需要將其除去;

解決方法:

  1. 使用scanf讀取掉那個字符;
  2. 使用getchar()讀取掉那個字符;
  3. 有必要的話用getline讀取掉也許。
    例子:
    在這里插入圖片描述
    輸入后要輸入字符串,可以先去清楚緩沖區(qū)
巧妙輸入

cin肯定是比scanf方便的,但有很多時候還是用scanf比較的好。
比如要輸入年:月:日cin肯定是不好實現(xiàn)的,用scanf("%d:%d:%d",&year,&month,&day);肯定會方便簡潔。
并且學會輸入數(shù)據(jù)的同時,處理數(shù)據(jù),這樣可以達到簡潔代碼,防止代碼重復。
下面就是個好例子:
在這里插入圖片描述

巧妙使用hash數(shù)組

使用數(shù)組達到hash的目的是比使用map要方便很多的,我們可以利用它的索引以及對應的值表示不同的含義。
比如:
索引表示學號,值表示排名;
索引表示學號,值表示是否存在;
索引表示時間,值表示數(shù)據(jù)量;
索引表示某字符的ASCII碼,值表示是否存在等等。
通過hash數(shù)組,可以讓我們查詢結果更快,效率更高!

簡單數(shù)學 質數(shù)
bool is_prim(int n){if(n<2) return false;
	for(int i=2;i*i<=n;++i){if(n%i==0) return false;
}
	return true;
}
倆數(shù)大公約與最小公倍

假設有倆數(shù)a和b,大公約數(shù)gcd和最小公倍數(shù)lcm的乘積應該為a*b;
大公約數(shù):

//a大于b
int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);
}
數(shù)因子
void ff(int n,vector&res){for(int i=1;i<=n;++i){if(n%i==0)
		res.push_back(i);
}
}
常用的頭文件及其內部函數(shù)

只說用的部分函數(shù),咋用這里木得

< map >
map_name.count(key);//這個可以用來判斷某個數(shù)是否存在
map_name.find(key)!=map.end();//和上面一樣
map_name[key] = value;//插入某對鍵值對
map_name.erase(key);//刪除為key的鍵值對
< set >
set_name.count(x);//這個可以用來判斷x是否存在
set_name.find(x)!=map.end();//和上面一樣
set_name.insert(x);//向set容器內插入數(shù)據(jù)x
< pair >

這沒啥,就相當于下面的結構體:

struct node{數(shù)據(jù)類型 first;
	數(shù)據(jù)類型 second;
}
< string >
string_name.substr(startIndex,length)//從startIndex下標開始截取length長度的字符串
string_name.erase(pos)//刪除pos下表的字符
string_name.insert(pos,n,ch)//在pos處插入n個ch字符
??int res = stoi(string_name);//字符串轉換成十進制
??string res = to_string(int val);//轉換成字符串里面可以是各種基本數(shù)據(jù)類型的變量
string_name.c_str();//string與const char*指針之間了轉換
< vector >

這個動態(tài)數(shù)組就不說了,沒啥需要特指的,還有stack和queue容器,這里不列舉。

< algorithm >

stl中的這個好用的函數(shù)太多了

max(x,y)
min(x,y)
swap(x,y)
abs(x)//x是整型的
reverse(it1,it2)//這里的it1和it2是指迭代器
fill()//填充
sort()
< cctype >
isalpha()
isdigit()
islower()
isupper()

還有什么toupper、tolower這樣的,想轉換我們直接ch ^= 32;用異或解決即可。

< iomanip >
setw()//域寬
setfill()//域填充
setbase()//進制

這里有倆好用的函數(shù),用于字符串匹配:

int sscanf(const char *str, const char *format, …)
int sprintf(char *str, const char *format, …)

sscanf是將str字符串轉換成對應的數(shù)據(jù)的,是從左到右按字符串匹配得到轉換的操作;
sprintf是將數(shù)據(jù)轉換成字符串,是從右到左匹配的一個轉換操作;
如果使用這個想用到string,那么可以使用string中的c_str()函數(shù),也可以對其進行操作了。

#include#include#includeusing namespace std;

int main(){char ch;
string s,s1;
getline(cin,s);
double f = 0.0;
char x[10];
sscanf(s.c_str(),"%lf",&f);
cout<< f<< endl;
sprintf(x,"%.2lf",f);
cout<< x<< endl;
return 0;
}
輸入:
66
輸出:
66
66.00

輸入:
89.356
輸出:
89.356
89.36

輸入:
3.23
輸出:
3.23
3.23

注意:里面的首個參數(shù)是char*指針,用string時可以通過c_str()函數(shù)使用sscanf,而用sprintf要用char類型數(shù)組。
sscanfsprintf成功的話會有返回值的,整型的,如果成功會返回1;
例子:
在這里插入圖片描述

常見的一些問題

在這里插入圖片描述
上面說的倆函數(shù)是不能用的,to_string可以轉換成string類型的,然后再調用c_str()也是可以達到那個itoa的效果的,所以不能用也沒關系。

  1. 浮點錯誤:運行時發(fā)生浮點錯誤,比如遇到了除以 0 的情況;
  2. 段錯誤:一般發(fā)生在數(shù)組越界了;
  3. 輸出超時,運行超時:先去看看存不存在死循環(huán);
  4. 格式錯誤:檢查自己輸出是否符合要求,比如空格什么的。
最后總結
  1. 寫題還是要仔細,比如看清要輸入的字符串是否包含空格,沒說包含一般就是有空格的,此時使用cin有些測試點就會出問題了;
  2. 看清題目給的范圍或者說是幾位,有的時候給的學號就會說幾位,巧妙利用所給的條件;
  3. 認真看輸出條件防止格式錯誤,比如末尾不留空格(經常),末尾不留回車符(有,但比較少)等等;
  4. 還是說認真讀題的問題,什么怎么輸入啊,什么條件下該干什么呀這樣的;
  5. 每個題設計出來肯定都會有其解決算法的(當然每題可用的算法可能會有多種,盡量想最方便自己的),先想再動筆,這樣一不容易出錯,二會提高速度;
  6. 也別輕易的去提交,先過樣例再去提交,別求速度求穩(wěn);
  7. 最后希望過幾天的考試可以多考幾分吧,希望這110題沒有白刷,加油。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當前文章:【PAT乙級】一百一十道真題刷后大匯總——C/C++-創(chuàng)新互聯(lián)
當前URL:http://chinadenli.net/article42/deeeec.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、響應式網(wǎng)站、標簽優(yōu)化、自適應網(wǎng)站、App設計、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設