紫書總結 第四章 函式和遞迴

2021-10-14 16:31:44 字數 2218 閱讀 3037

先看乙個小技巧(將數字反過來輸出。)

int n =

63945

;int ans =0;

while

(n) ans = ans *

10+ n %

10, n /=10

;// 輸出 54936

將其進行擴充套件

#include

#include

intbase_conversion

(char

* s,

int n,

int m)

intmain()

#include

const

int big =

1000

;int

main()

main函式是整個程式的入口,包括評測系統,,這個0代表的是「正常結束」,所以在演算法競賽中, 請總是讓main函式返回0, 以免評測機系統錯誤的認為程式異常退出了。

注意變數資料範圍的問題,可能一不小心就溢位了。

資料型別

資料範圍

備註char-128 ~ +127 (1 byte)

注意這個範圍,如果儲存了不在這個範圍內的字元,就會輸出亂碼!

short-32767 ~ + 32768 (2 bytes)

記住正負三萬多

unsigned short0 ~ 65536(2 bytes)

差不多的長度,只是範圍往後移動了而已,正六萬多。

int-2147483648 ~ +2147483647 (4 bytes)

記住能儲存正負2.1* 10^10左右

unsigned int0 ~ 4294967295 (4 bytes)

記住能儲存4.2* 10^10左右

long==int

long long-9223372036854775808 ~ +9223372036854775807 (8 bytes)

記住能儲存9.2 * 10^19左右

double1.7 * 10^308 (8 bytes)

注意優先順序的問題,有時候就是這些小細節導致整個程式出bug

優先順序運算子說明

結合性1

::範圍解析

自左向右

2++   --

字尾自增/字尾自減

()括號

陣列下標

.成員選擇(物件)

−>

成員選擇(指標)

3++   --

字首自增/字首自減

自右向左

+   −

加/減!   ~

邏輯非/按位取反

(type)

強制型別轉換

*取指標指向的值

&某某的位址

sizeof

某某的大小

new, new

動態記憶體分配/動態陣列記憶體分配

delete, delete

動態記憶體釋放/動態陣列記憶體釋放

4.*   ->*

成員物件選擇/成員指標選擇

自左向右

5*   /   %

乘法/除法/取餘

6+   −

加號/減號

7<<   >>

位左移/位右移

8<   <=

小於/小於等於

>   >=

大於/大於等於

9==   !=

等於/不等於10&

按位與11

^按位異或12|

按位或13

&&與運算

14||

或運算15

?:三目運算子

自右向左16=

賦值+=   −=

相加後賦值/相減後賦值

*=   /=   %=

相乘後賦值/相除後賦值/取餘後賦值

<<=   >>=

位左移賦值/位右移賦值

&=   ^=   |=

位與運算後賦值/位異或運算後賦值/位或運算後賦值

17throw

丟擲異常18,

逗號自左向右

演算法競賽入門經典 紫書 第四章

關於判斷素數的幾點 該函式有嚴重缺點 不能用於n 1和n較大的情況 在n接近int的最大值時 若i 46340時,i i 2147395600 若i 46341時,i i 2147488281超過了int的最大值,溢位變成了負數,就會繼續進行下去 intis prime int n return1 ...

第四章 函式和遞迴例題

例題4 1 組合數 輸入非負整數m,n輸出組合數c n,m m n 20 分析 從普通思維出發先算n 再算m 再算 n m 最終我們會發現,20!以及超出整數所能表示的範圍。因此此題不宜使用這種方法。經分析,我們發現n 和m 或者 n m 有重疊的部分,可以約去。因此得到如下解法 includeus...

第四章總結

1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...