2.9
.1 cin與cout
讀入多個變數,讀入了int 型變數n、double型變數db、char 型變數c、char 型陣列str:
cin>>n>>db>>c>>str;
如果想要讀入一整行,則需要使用getline函式,
把一整行都讀入char型陣列str[
100]中:
char str[
100]
;cin.
getline
(str,
100)
;而如果是string容器(第6章會介紹),則需要用下面的方式輸入:
string str;
getline (cin,str)
;cout << n <<
"\n"
<< db << endl;
如果想要控制double型的精度,要加上#include 標頭檔案。下面的**會輸出123.46
:cout <<
setiosflags
(ios:
:fixed)
<<
setprecision(2
)<<
123.4567
<< endl;
不推薦讀者使用cin跟cout來進行輸入和輸出,因為它們在輸入/輸出大量資料的情況下表現得非常糟糕,
有時候題目的資料還沒有輸入完畢就已經超時。
因此還是推薦讀者使用c語言的scanf與printf 函式進行輸入/輸出,只有在十分必要的時候
才使用cin與cout
(例如第6章會介紹的string)。
2.9
.2浮點數的比較
1.由於計算機中採用有限位的二進位制編碼,因此浮點數在計算機中的儲存並不總是精確的。
例如在經過大量計算後,乙個浮點型的數3.14在計算機中就可能儲存成3.140000000001
,也有可能儲存成3.139999999999,
這種情況下會對比較操作帶來極大的干擾(因為c/c++中的「==」操作是完全相同才能判定為true
)。 於是需要引入乙個極小數eps來對這種誤差進行修正。
----
----
----
----
2.如果想要使用不等於,只需要
在使用時的equ前面加乙個非運算子「!」即可(
!equ
(a, b)
)。#include
#include
const
double eps=
1e-8
;#define equ(a,b) ((fabs((a)-(b)))<(eps))
intmain()
else
{ printf (
"false");
return0;
>
大於b+eps的數才能判定為大於b (也即a減b大於eps)。
#define more(a,b) (((a)-(b))> (eps))
>=
大於b- eps的數都應當判定為大於等於b (也即a減b大於- eps)。
#define moreequ(a,b) (((a)-(b))>(-eps))
<
小於b- eps的數才能判定為小於b (也即a減b小於eps)。
#define less(a,b)(((a)-(b))<(-eps))
<=
小於或者等於b,因此小於b+eps的數都應當判定為小於等於b (也即a減b小於eps)。
#define lessequla,b) (((a)-(b))<(eps))
3.圓周率π
const
double pi=acos (
-1.0);
把上面的所有核心部分彙總起來就是下面這些**:
const
double eps=le-8;
const
double pi=acos (
-1.0);
#define equ(a,b) ( (fabs((a)-(b)))< (eps) )
#define more (a,b) (((a)-(b))>(eps) )
#define less(a,b) ( ((a)-(b))< (-eps) )
#define moreequ(a,b) (( (a)-(b))> (-eps) )
#define lessequ(a,b) (((a)-(b) )<(eps) )
2.9
.3複雜度1.o
(1)<
o(logn)
<
o(n)
<
o(n^
2)成立。
對1般的oj系統來說,一秒能承
受的運算次數大概是10^7
~10^8,因此o
(n^2
)的演算法當n的規模為1000時是可以承受的,而當
n的規模為100000 時則是不可承受的。
2.例如對某個演算法來說,如果其消耗的最大資料空間是乙個二維陣列,那麼這個演算法的空間復
雜度就是o
(n^2
)。在1般的應用中,1般來說空間都是足夠使用的(只要不開好幾個10
^7以上
的陣列即可,例如int a[
10000][
10000
]的定義就是不合適的),
因此其重要性一般沒有時間複雜度那麼大。另外,0(1
)的空間複雜度是指演算法消耗的空間不隨資料規模的增大而增大。
考慮到空間一般夠用,因此常常採用以空間換時間的策略,
例如4.2節的雜湊法就是一種以空間換時間的高效方法。
排序演算法 筆記 有待補充
常用排序演算法對比 一 內部排序 指待排序記錄存放在計算機隨機儲存器中進行的排序過程 二 外部排序 指待排序記錄的數量很大,以致記憶體一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程 三 排序方法穩定和不穩定 四 內部排序常用方法 1.插入排序 1 直接插入排序 基本思想 假設待排序的...
排序演算法 補充
對於上次學習借鑑到的大師級的排序演算法,感概良多,從演算法執行的效率上來說,quicksort 不考慮普遍的最環情況,它的速隊的確是排序演算法中的佼佼者。這次的學習到的演算法包括了插入排序 直接插入,折半插入,希爾排序 選擇排序 堆排序 都是各有利弊。基本的演算法實現如下,因為遞迴使用的不是很好,同...
雜湊演算法補充
比如從10000個從小到大排列且不連續數字裡找出8654 普通方法就是用眼瞅,從左到右 運氣好瞅一次,運氣不好瞅一萬次 於是就有了二分法,取出中間的值 左邊的值一定比中間的值小 右邊的值一定比中間的值大 於是找到8654所用的時間大大縮短可以把把文字內容 一串字元計算成一串hash值 一串內容 ha...