在撲克牌遊戲中,每次遊戲開始都要求把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語言中型別及其作...