二(遞歸遞推)知識(shí)點(diǎn))
1.B2004這道題主要考輸出格式常見考點(diǎn)保留指定小數(shù)位數(shù)cout fixed setprecision(3) x endl;數(shù)字按固定寬度輸出不足補(bǔ)前導(dǎo)零或空格cout setfill(0) setw(4) num endl; // 輸出 0012cout setfill( ) setw(4) num endl; // 輸出 12右對(duì)齊cout left setw(4) num endl; // 輸出 12 左對(duì)齊setw 僅對(duì)下一個(gè)輸出項(xiàng)有效每次都需要設(shè)置。setfill 和 left/right 是持久的。以八進(jìn)制、十六進(jìn)制形式輸出可能要求帶前綴如 0x或不帶。int a 255;cout hex a endl; // 輸出 ffcout showbase hex a endl; // 輸出 0xffcout uppercase a endl; // 輸出 0XFFcout dec a endl; // 恢復(fù)十進(jìn)制科學(xué)計(jì)數(shù)法與定點(diǎn)小數(shù)double x 123.456;cout scientific x endl; // 輸出 1.234560e02cout fixed x endl; // 輸出 123.4560003.B2147這題用到了第一題的setprecision同時(shí)還用到了數(shù)學(xué)函數(shù)這里補(bǔ)充一下關(guān)于setprecision的知識(shí)同時(shí)回顧一下常見的數(shù)學(xué)函數(shù)吧setprecision(n)當(dāng)setprcision(n)不與fixed / scientific連用時(shí)表示n位有效數(shù)字整數(shù)位也在其中當(dāng)setprecison(n)與fixed / scientific連用時(shí)表示精度為n位也就是保證n位小數(shù)常見的數(shù)學(xué)函數(shù)5.P1226 【模版】快速冪快速冪的作用是快速求出ab的值實(shí)現(xiàn)思路可以看這道題的題解講的非常好這里我把代碼放上來用于快速回顧#includeiostreamusingnamespacestd;intmain(){longlonga,b1,p;cinab1p;longlongans1,basea,bb1;//初始準(zhǔn)備//ans是最終答案base是權(quán)值初始是底數(shù)的1次方while(b!0){//關(guān)鍵1b二進(jìn)制右移直到為0if(b1){//關(guān)鍵2當(dāng)b末位為1時(shí)ansans*base%p;//乘上權(quán)值記得取模//關(guān)鍵3(AB) mod b (A mod b B mod b) mod b//(A×B) mod b ((A mod b) × (B mod b)) mod b}basebase*base%p;//關(guān)鍵4因?yàn)橛乙茩?quán)值進(jìn)位b1;//記得右移且賦值}printf(%ld^%ld mod %ld%ld\n,a,b1,p,ans);return0;}6.B3860類似讀完論文參考文獻(xiàn)的題主要考察遞歸以及去重條件這題去重可以用set容器和bool數(shù)組標(biāo)記法以后遇到類似的可以參考這倆個(gè)思路我看答案沒遞歸用的雙端隊(duì)列deq和set也是不錯(cuò)的思路這題可以回顧一下輸入輸出解綁加速加速輸入輸出流//1ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);//2可以用0替換這兩個(gè)關(guān)鍵字ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);使用前為了保證 C 的 cin/cout 與 C 的 printf/scanf 可以混用且輸出順序正確標(biāo)準(zhǔn)庫(kù)會(huì)讓兩者保持同步這導(dǎo)致 cin/cout 在每次操作時(shí)都要額外檢查并刷新緩沖區(qū)效率較低使用后cin/cout 獨(dú)立使用自己的緩沖區(qū)不再與 C 流同步速度會(huì)顯著提升可能快幾倍甚至幾十倍。但代價(jià)是不能混用 cin/cout 和 printf/scanf否則輸出結(jié)果可能亂序或丟失7.P1162染色題考的是搜索我的做法是把正方形輸入到(1,1)~(n,n)然后外面再加一圈0從(0,0)開始搜索把所有遇到的外圍0改成2現(xiàn)在我看到了另一種做法思路是遍歷矩陣的每個(gè)格子當(dāng)遇到一個(gè)未被訪問的 0 時(shí)啟動(dòng)一次 DFS。DFS 會(huì)將該格子及其所有相鄰的 0上下左右標(biāo)記為一個(gè)獨(dú)立的連通區(qū)域并為該區(qū)域分配一個(gè)唯一的 id從 3 開始遞增。同時(shí)DFS 還會(huì)判斷該區(qū)域是否觸及矩陣邊界如果搜索過程中遇到邊界越界則返回 false表示該區(qū)域連通到了外部不被完全包圍。如果遇到 1 或已經(jīng)標(biāo)記過的同區(qū)域格子則返回 true表示該方向被障礙或已訪問區(qū)域阻擋。通過邏輯與組合四個(gè)方向的返回值只要有一個(gè)方向觸及邊界最終結(jié)果即為 false。感覺還是我的方法簡(jiǎn)單8.P1010題意是把數(shù)字拆成如13152102825212(2(22(0))2)2(2(22(0)))2(2(2)2(0))22(0)的形式我用的是二進(jìn)制右移找到所有的2n再遞歸分解n拼接字符串遇到了一個(gè)查了好久的bug運(yùn)算符優(yōu)先級(jí)低于復(fù)習(xí)一下運(yùn)算符優(yōu)先級(jí)吧順便運(yùn)算符優(yōu)先級(jí)我看題解的思路是用pow和log2函數(shù)寫的我這個(gè)其實(shí)更偏向于不會(huì)用數(shù)學(xué)函數(shù)寫出來比較繞的答案貼上大佬代碼膜拜一下#includeiostream//不解釋#includecmath//其中有l(wèi)og2(x)和pow(x,y)函數(shù)具體作用往下看usingnamespacestd;voiddivide(intx){boolflagfalse;//...判斷是否是第一個(gè)如果是的話就不輸出加號(hào)while(x!0){inttint(log2(x));/* log2(x)這個(gè)函數(shù)求以2為底x的對(duì)數(shù)例如log2(8)返回3因?yàn)?^38 而這里把返回值強(qiáng)制轉(zhuǎn)換為int是為了找到離x最近又小于x的能表示為2^k的數(shù) 例如int(log2(137))就能返回7而2^7128恰為離137最近的能表示為2^k的數(shù) */if(flag)cout;//開頭不輸出加號(hào)if(t1)cout2;//如果這一項(xiàng)是1輸出2不遞歸elseif(t0)cout2(0);//如果這一項(xiàng)是0輸出2(0)不遞歸else{cout2(;divide(t);//遞歸一層把括號(hào)里的數(shù)分解輸出cout);}x-pow(2,t);//繼續(xù)處理下一項(xiàng)flagtrue;}}intmain(){intn;cinn;divide(n);return0;}log2函數(shù)計(jì)算以 2 為底的對(duì)數(shù)C11 起x 必須 0注意本題用了log2強(qiáng)制轉(zhuǎn)成了intdoublelog2(doublex);floatlog2(floatx);longdoublelog2(longdoublex);doublelog2(IntegralType x);// 整型參數(shù)會(huì)轉(zhuǎn)換為 double