廣州市建設(shè)局官方網(wǎng)站代運(yùn)營哪家公司最靠譜
一進(jìn)考場設(shè)置devc快捷鍵
- 設(shè)置注釋和取消注釋快捷鍵
- 設(shè)置代碼自動(dòng)補(bǔ)全快捷鍵
- 開啟devc調(diào)試功能,詳細(xì)可以看怎么開調(diào)試功能https://blog.csdn.net/hz18790581821/article/details/78418648
- 比賽過程中,如果不相信自己是否做對(duì),沒有把握的,可以打印出過程來檢驗(yàn)一下,在有些情況下是有用的。。。千萬不能辛辛苦苦做了,居然因?yàn)樽詈笠徊藉e(cuò)了!因?yàn)榭紙鍪遣恢澜Y(jié)果的,不能知道結(jié)果去驗(yàn)證靠近結(jié)果,而是要不斷懷疑自己的結(jié)果是不是正確的!
注意事項(xiàng)
1、不要能用字符串直接輸出的,就不要還用數(shù)組來判斷,當(dāng)數(shù)據(jù)量大的時(shí)候就會(huì)超時(shí),明明都判斷了,可以直接運(yùn)行了,就不要多此一舉放在數(shù)據(jù)里,因?yàn)樗挥腥齻€(gè)變量,又不是很多,所以完全可以各自單獨(dú)列出來。
if(s[i] == "Mccree") cout<<"Genji";
else if(s[i] == "Hanzo") cout<<"Mccree";
else cout<<"Hanzo";
錯(cuò)誤示范
if(s[i]==des[0][0]) sa[i]=des[1][0];
else if(s[i]==des[0][1]) sa[i]=des[1][1];
else sa[i]=des[1][2];
sprintf()、memset()函數(shù)
用來格式化字符串,注意格式化的是字符數(shù)組
頭文件#include< cstdio>
#include<iostream>
#include<cstdio>
using namespace std;
int main(){char s[15];sprintf(s, "%08d", 123);cout<<s<<endl;return 0;
}
sprintf(s, “%08d”, 123);可以使得字符串的輸出格式為右對(duì)齊,以0補(bǔ)齊00000123
memset()函數(shù):
參考學(xué)習(xí)鏈接:https://blog.csdn.net/qq_25406563/article/details/83303371?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
memset(結(jié)構(gòu)體/數(shù)組名 , 用于替換的ASCII碼對(duì)應(yīng)字符 , 前n個(gè)字符 );
memset(結(jié)構(gòu)體/數(shù)組名 , "用于替換的字符“ , 前n個(gè)字符 );
函數(shù)解釋:將s中的前n個(gè)字節(jié)用ch替換并且返回s
函數(shù)作用:在一段內(nèi)存塊中填充某一個(gè)給定的值,常用于較大的對(duì)結(jié)構(gòu)體和數(shù)組的清零操作。
注意閏年
閏年判斷方法
1.能被4整除而不能被100整除。
2.能被400整除。
平年是365天,閏年是366天
閏年2月29天,平年2月28天
有關(guān)日期的,題目很喜歡在2月份埋坑,要特別注意閏年平年
set容器、vector、map容器
構(gòu)造set集合的主要目的是為了快速檢索,使用set前,需要在程序頭文件中包含聲明“#include< set>”
它不會(huì)重復(fù)插入相同鍵值的元素,而采取忽略處理。
而且只要把元素放進(jìn)set里面去,用for循環(huán)讀取就可以按序讀取
注意:初始化的方法,和輸出的方式
//定義set容器,排序、避免冗余 set<string>e;for(set<string>::iterator it=e.begin();it!=e.end();it++) {cout<<"it: "<<*it<<endl;
// cout<<*it<<endl;
另外,在買不到的糖果數(shù)的題目中也有用到set容器
if(s.find(i)==s.end()){//i不在set中,那么i就是答案cout<<i<<endl;break;//找到后跳出循環(huán) }
stl容器set成員函數(shù):find()–返回一個(gè)指向被查找到元素的迭代器
另外,在跳蚱蜢的題目中也有用到set容器
set<string> visited;//已經(jīng)搜索過的局面
if(visited.count(s)==0)//如果沒有搜索過這個(gè)局面{visited.insert(s);}
stl容器set成員函數(shù):count()返回集合中某個(gè)值元素的個(gè)數(shù)
set容器用 s.insert(temp);進(jìn)行元素的插入
跟vector不一樣,插入跟查找特定元素不一樣
#include <algorithm>
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vector<int>::iterator ret; ret = std::find(vec.begin(), vec.end(), 15); if(ret == vec.end()) cout << "not found" << endl; else cout << "found it" << endl;
erase函數(shù)
https://blog.csdn.net/leo_csdn_/article/details/82221721
scanf()的好用處
scanf()在頭文件#include< cstdio>里,作為有一定格式輸入時(shí)更好用,如要輸入02/03/04,
int a[3],b[3];scanf("%d/%d/%d",&a[0],&a[1],&a[2]);
getline和cin對(duì)string的輸入
getline(cin,string)讀取一行以回車為結(jié)束,空格不會(huì)當(dāng)成是結(jié)束的
但cin>>string;讀取至空格或回車.
所以要每次讀取一個(gè)單詞時(shí)候用cin>>string,,即要把空格識(shí)別作為結(jié)束,所以用cin>>string。
常用的函數(shù)及其頭文件
- strlen()函數(shù),在< cstring>頭文件里
- CCTYPE函數(shù)系列包含了判斷是否是字符等函數(shù)
- sqrt()求平方根函數(shù),atan2()函數(shù)可根據(jù)x和y的值計(jì)算角度。
- #include< algorithm> 里面有sort()排序函數(shù)
- min函數(shù),比較兩個(gè)數(shù)值的大小,返回他們的之間最小值。頭文件#include < algorithm>。如 num = min(currentNum, num);
- 編程填空題可用的萬能頭文件#include<bits/stdc++.h>
- 絕對(duì)值函數(shù) fabs()的頭文件 #include< cmath>
- 全排列函數(shù) next_permutation(a,a+10)頭文件#include < algorithm>
do{ 放置內(nèi)容…… }while(next_permutation(a,a+10));
雖然有10個(gè)元素,最后一個(gè)的下標(biāo)也是a[9],但是區(qū)間的話是[a,a+10),所以還是以元素個(gè)數(shù)做為加多少的結(jié)尾- gcd函數(shù)
gcd(x,y);最大公約數(shù)函數(shù)
int、long long類型都可以,需要注意的是兩個(gè)類型必須要相同,還有不能用浮點(diǎn)型,當(dāng)然手寫gcd函數(shù)也是可以的,它頭文件是algorithm。
while (cin >> income)問題
double income;
while (cin >> income)
當(dāng)輸入的不是數(shù)字的時(shí)候,壓根不會(huì)進(jìn)入while循環(huán),因?yàn)椴粷M足cin >> income的條件。cin>>被用于測(cè)試表達(dá)式中將根據(jù)輸入是否成功,被轉(zhuǎn)換為bool值true或false。cin>>將知道輸入的如字符那些表示數(shù)字,從而將其留在隊(duì)列中,并返回一個(gè)將被轉(zhuǎn)換為false的值,這時(shí)while循環(huán)將會(huì)終止。
#include<iostream>
#include<string>
#include<sstream>
//新學(xué)的頭文件using namespace std;
int main(){string s;while(getline(cin,s)){int sum =0,x;int count = 0;int i = 0;stringstream ss(s);//復(fù)制字符串s到stringstream ss while(ss>>x){sum+=x;cout<<"i++: "<<i++<<endl;}cout<<"count++: "<<count++<<endl;cout<<"sum: "<<sum<<endl;}return 0;
}
getline (cin, stri)返回cin,cin再轉(zhuǎn)換為bool值true(讀入成功)或者false(讀入失敗),所以此次循環(huán)結(jié)束的就是按下ctrl+z
要注意類型以及溢出等問題!
有時(shí)候不注意int跟double,或者忽略了隱式類型轉(zhuǎn)換,即使聲明是double,但也可能被隱式轉(zhuǎn)換為int了
double cal (int x,int y){double ave;
// 注意類型轉(zhuǎn)換double,不然x和y會(huì)以int 類型進(jìn)行計(jì)算,計(jì)算的ave的結(jié)果也是int ,不過有2.0跟2的差別
// ave = 2.0 * double(x * y) / (x + y);ave = 2.0* x * y / (x + y);
// 當(dāng)乘以的是2的時(shí)候是整數(shù),乘以是2.0的時(shí)候結(jié)果是浮點(diǎn)數(shù)
// ave = 2* x * y / (x + y);return ave;
}
包括一些聲明的是long long類型,但是相乘的兩個(gè)數(shù)是long類型,這樣子long long就被隱式轉(zhuǎn)換為long了就會(huì)溢出!!
STL容器學(xué)習(xí)
STL容器學(xué)習(xí)
- 比如在錯(cuò)誤的票據(jù)這道題里用了vector模板類,(注意頭文件和聲明)因?yàn)榭梢圆挥檬孪嚷暶鞔笮?#xff0c;而只需要一直把元素v.push_back(x);進(jìn)去就好,還可以利用sort(v.begin(),v.end());快速的對(duì)容器的元素進(jìn)行排序。還可以通過v.size()知道容器元素?cái)?shù)量,然后通過for(int i=1;i<v.size();i++)遍歷容器
- 隊(duì)列的學(xué)習(xí)和使用:學(xué)習(xí)鏈接
#include<iostream>
#include<queue>using namespace std;int main(){queue<string> q;
// 入隊(duì),如例:q.push(x); 將x 接到隊(duì)列的末端。q.push("zhangsan");q.push("lisi");q.push("wangwu");
// 判斷隊(duì)列空,如例:q.empty(),當(dāng)隊(duì)列空時(shí),返回true。while(!q.empty()){
// 訪問隊(duì)首元素,如例:q.front(),即最早被壓入隊(duì)列的元素。cout<<q.front()<<endl;
// 出隊(duì),如例:q.pop(); 彈出隊(duì)列的第一個(gè)元素,注意,并不會(huì)返回被彈出元素的值。q.pop();}
}
string字符串
查找字串的函數(shù) str.find(subStr1) != string::npos 如果找到了返回string::npos ,subStr1需要是字符串
#include <cstring>//頭文件
string str = "abc";
string subStr1 = "bc";
string subStr2 = "cd";
str.find(subStr1); //返回1,第一個(gè)匹配的下標(biāo)
str.find(subStr2);
//當(dāng)str.find(subStr1) != string::npos時(shí),說明是子串
//當(dāng)str.find(subStr1) == string::npos時(shí),說明不是子串
if(str.find(subStr1) != string::npos){cout<<"subStr1 是 str 的子串"<<endl;
}
stringstream
可以方便地實(shí)現(xiàn)了字符串與數(shù)字的互相轉(zhuǎn)化
#include <sstream>//頭文件
string i2s(int i){stringstream ss;string s;//把數(shù)字i存到ss中ss<<i;//把ss中有的轉(zhuǎn)換為字符串sss>>s;return s;
}
涉及到多位數(shù)字相乘之類的
要把一個(gè)多位數(shù)看出多個(gè)位的單位數(shù)組成,用
for(int i=1;i<=9;i++)for(int j=0;j<=9;j++)for(int k=0;k<=9;k++)for(int l=0;l<=9;l++){
而不是
for(int x=1;x<=999;x++)for(int y=1;y<=999;y++)
比如在排他平方數(shù)里也是這樣子。
有幾位數(shù)就會(huì)用到幾個(gè)for循環(huán),比如四位數(shù),用四個(gè)for循環(huán),找出四個(gè)數(shù),之后再用*1000,*100,*10之類的變成幾千幾百幾十的數(shù)
編程題技巧
- 認(rèn)真讀題,認(rèn)真分析題目,不要害怕
- 編程大題如果不會(huì),千萬不要放棄!因?yàn)橛泻芏鄿y(cè)試用例,可以暴力保證一些用例的測(cè)試是對(duì)的!這樣子能賺一點(diǎn)分,能賺一點(diǎn)是一點(diǎn)!要有多拿一分是一分的想法,不能放棄掉!