范型程式設計 洗牌

2021-07-13 09:57:49 字數 2523 閱讀 1148

在撲克牌遊戲中,每次遊戲開始都要求把54張牌重新排列一下,稱為洗牌。試編寫程式將一副撲克牌(用54個整數1~54表示)隨機洗好後,順序輸出54張牌的情況。

4種方法來品味如何用stl解決問題:

解法1:初始化乙個 vector,順序加入所有牌,即整數1~54。然後從容器中隨機抽取乙個加到另乙個vector中,這個過程一共執行54次。

#include "stdafx.h"

#include #include #include #include #include #include using namespace std;

using namespace std;

typedef vectorintvector;

typedef unsigned int vindex;

void vectorshuffle(intvector &unshuffled, intvector &shuffled)

}int main()

cout << "before shuffle" << endl;

copy(c.begin(), c.end(), os);

cout << endl;

vectorshuffle(c, sc);

cout << "\nafter shuffled" << endl;

copy(sc.begin(), sc.end(), os);

cout << endl << endl;

return 0;

}

解法2:相同思路,用list

#include "stdafx.h"

#include #include #include #include #include #include using namespace std;

typedef listintlist;

typedef unsigned int vindex;

void listshuffle(intlist &unshuffled, intlist &shuffled)

shuffled.push_back(*iter);

unshuffled.erase(iter); }}

int main()

cout << "before shuffle" << endl;

copy(cl.begin(), cl.end(), os);

cout << endl;

listshuffle(cl, scl);

cout << "\nafter shuffled" << endl;

copy(scl.begin(), scl.end(), os);

cout << endl << endl;

return 0;

}

解法3:隨機交換兩個位置的元素來洗牌。函式中time是要執行交換的次數,如果是54張牌的話,交換次數大於27的話就已經表現出很隨機的排列了。

#include "stdafx.h"

#include #include #include #include #include using namespace std;

typedef vectorintvector;

void swapshuffle(intvector &datas, int time)

}int main()

cout << "before shuffle" << endl;

copy(poker.begin(), poker.end(), os);

cout << endl;

swapshuffle(poker, 100);

cout << "\nafter shuffled" << endl;

copy(poker.begin(), poker.end(), os);

cout << endl << endl;

return 0;

}

解法4:採用stl的 random_shuffle 演算法

#include "stdafx.h"

#include #include #include #include #include using namespace std;

int main()

cout << "before shuffle" << endl;

copy(poker.begin(), poker.end(), os);

cout << endl;

random_shuffle(poker.begin(), poker.end());

cout << "\nafter shuffled" << endl;

copy(poker.begin(), poker.end(), os);

cout << endl << endl;

return 0;

}

C 實踐參考 洗牌(范型程式設計)

專案2 洗牌 在撲克牌遊戲中,每次遊戲開始都要求把54張牌重新排列一下,稱為洗牌。試編寫程式將一副撲克牌 用54個整數1 54表示 隨機洗好後,順序輸出54張牌的情況。參考介面 參考解答 共4種,可作為程式閱讀,品味用stl解決問題的方法,必要時,請查詢相關手冊 解法1 初始化乙個 vector,順...

3種程式設計范型

計算機應用離不開編寫程式。按不同的思路和方法來編寫程式,就形成不同的程式設計范型。1956年,世界上第乙個高階語言fortran問世。50多年來,高階語言的程式設計范型大體經歷了3次演變,即過程式范型 物件導向程式設計范型與基於構件技術的程式設計范型。過程式程式設計范型遵循 程式 資料結構 演算法 ...

c語言討論 范型程式設計

c語言中使用乙個變數之前要對其進行定義,那麼首先來看一下具體的乙個變數的定義。1.inta 10 2.charchartest 3.floatb 1.0 4.regest doublex 5.static int int ptr null 6.char words 10 10 1.c語言中型別及其作...