、52張撲克牌分發給
4人,每人
13張,要求保證隨機性。已有隨機整數生成函式
rand()
,但開銷較大。請編寫函式實現
void deal(int a,int b,int c,int d)
,撲克牌用序號
0-51
表示,分別存在大小為13的
a,b,c,d
四個陣列中,
要求盡可能高效。
我的思路是:保證隨機性無非就是保證每張牌都有可能被任意乙個人獲得,簡單的是直接沒發一張牌呼叫一次隨機函式
,這樣效率低。我認為我們可以從結果出發,不去關注發牌的方式。最終每人都得到
13張牌,我們先把牌標號
0-51
,並按序存入陣列
array
中。其中
mod4==0
位置上的牌將發給a,
mod4==1
位置上的牌將發給b,
mod4==2
位置上的牌將發給c,
mod4==3
位置上的牌將發給
d。這樣我們只需要對
array
陣列中數的進行隨即調整,就能保證最終發牌結果的隨機性了。
可以mod4==0
位置上的所有數與通過隨機函式產生的位置上的數進行調換,總共呼叫
13次隨機函式,而且保證任意13張
牌都有可能被
a拿到,b,
c,d也是。具體程式就不寫了,不知道這種想法是不是與出題者的意圖相符。
2、將乙個字串逆轉,如
"hello"
變成"olleh"
,不許呼叫任何已有的字串庫函式,要求盡量高效,以及占用盡量少
的儲存空間。
程式如下:
#include
int main()
std::cout << str << std::endl;
length++;
char tmp;
int i = 0;
while(i < (int)(length-1)/2)
std::cout << str << std::endl;
return 0;
}這個思路既節省執行時間,又沒有多餘的記憶體開銷。時間上
length + length/2
,空間只是在原有陣列上進行,沒占用
多餘的記憶體。3、有
10億個無符號整數儲存在檔案中,取值範圍是
0-1000
萬,給定值
value
返回大於該數的個數。完成以下類函式的實現:
class order_calculator
已有函式
get_value_by_index(unsigned index)
根據index
索引值返回值可以呼叫,但此函式開銷較大。
這個題先動態申請
1000
萬的int
陣列,用於記錄
0-1000
萬數的出現次數,掃瞄檔案對這個陣列元素進行賦值。這些要在建構函式中完成。
析構函式中,動態的釋放記憶體。
get_bigger_count(unsigned value)
中,只是查詢陣列中對應下標大於
value
的元素的值,並返回。
這個沒想出更好的方法。
有興趣的朋友可以和我交流一下,共同進步!
百度筆試題
一 選擇題 15分 共10題 1.在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 a.shell排序 b.歸併排序 c.直接插入排序 d.選擇排序 2.以下多執行緒對int型變數x的操作,哪幾個需要進行同步 a.x y b.x c.x d.x 1 3.void func 中,變數val的記憶體...
百度筆試題
一 選擇題 15分 共10題 1.已知乙個線性表 38,25,74,63,52,48 採用的雜湊函式為hash key key mod 7,將元素雜湊到表長為7的雜湊表中儲存。請選擇後面兩種衝突解決方法分別應用在該雜湊表上進行等概率成功查詢的平均查詢長度,拉鍊法 線性探測法 a.1.0 b.1.5 ...
百度筆試題
1 完成函式 size t foo unsigned int a1,size t al1,unsigned int a2,size t al2 其中a1和a2都為無符號陣列,al1和al2為陣列的長度,陣列的長度為偶數。無符號陣列由一對數字區間組成。如下例 a1 為 0,1,3,6,10,20 a2...