紅色標記的地方是我標註的乙個重點
實現乙個演算法: 將一副54張撲克牌經過洗牌後順序發給三個人,然後將每個人的牌按降序排序。我們已經設計出了撲克牌類card、演算法類game,並且有了測試**main.cpp,但演算法類game中的洗牌函式shuffle()和發牌函式deal()沒有實現,請寫出具體的實現**,以使測試**main.cpp中輸出期望的內容。
撲克牌類:
card.h
#ifndef card_h
#define card_h
#include
using namespace std;
//撲克牌類
class card
/** 花色 */
public:
int suit;
/** 點數,0代表3,1代表4.... */
int rank;
enum
card(int s, intr):suit(s),rank(r){}
string tostring();
#endif
card.cpp
#include
#include "card.h"
const string card::suit_names = ;
const string card::rank_names =;
string card::tostring(){
return suit_names[suit] + rank_names[rank];
演算法類:
game.h
#ifndef game_h
#define game_h
#include "card.h"
using namespace std;
class game{
public:
//洗牌函式,把一副牌的次序隨機打亂
void shuffle(card* cards,int len);
//發牌函式,第乙個陣列是洗牌後的結果,第二個陣列是二維
//陣列的首位址,num是人數。發牌的時候每個人的牌要做排序
void deal(card* cards,int len,card* ret,int num);
#endif
main.cpp
#include
#include
#include
#include
#include "game.h"
using namespace std;
int main()
//生成牌
card* cards = new card[54];
int i = 0,j = 0;
int rank,suit;
for (rank = card::three; rank <= card::deuce; rank++)
for(suit = card::diamond;suit <= card::spade;suit++){
(cards+i)->suit = suit;
(cards+i)->rank = rank;
i++;
(cards+i)->suit = card::joker;
(cards+i)->rank = card::black;
i++;
(cards+i)->suit = card::joker;
(cards+i)->rank = card::red;
//洗牌
game* g = new game;
g->shuffle(cards,54);
cout<<"一副撲克牌"card res[3][18];
g->deal(cards,54,(card*)res,3); //注意:這裡的(
card*
)是必須的,因為二維陣列名是指
//向指標的指標,這裡也可以寫成
res[0]
cout<<"發牌之後"cout << "[";
for(j=0;j<18;j++){
cout << res[i][j].tostring();
if(j!=17) cout<<",";
cout <<"]"<< endl;
game.cpp
#include "game.h"
//洗牌函式
void game::shuffle(card* cards,int len){
srand(time(0));
printf("%p\n",cards);
int i;
for (i = len-1; i >= 1; i--)
int j = rand()%i;
card t = cards[i];
cards[i] = cards[j];
cards[j] = t;
//排序函式(冒泡)
void sort(card* ary,int len){
int i, j;
for (i = 0; i < len-1; i++)
for (j = 0; j < len-1-i; j++)
if((ary+j)->rank < (ary+j+1)->rank){
card k = ary[j];
ary[j] = ary[j+1];
ary[j+1] = k;
//發牌函式
void game::deal(card* cards,int len,card*ret,int num){
int sum = len/num;
int i,j;
for(i=0,j=0;iret[i]= cards[j++];
ret[sum+i]= cards[j++];
ret[2*sum+i]= cards[j++];
for(i=0;isort(ret+i*sum,sum);
撲克牌排序 趣味撲克牌
一提到撲克牌,我們就想到神秘的魔術表演,撲克牌上有很多形狀和數字,裡面蘊藏了很多數學知識哦!瞧 subway的小朋友們正在進行趣味撲克牌的遊戲呢!好多撲克牌啊!撲克牌中間怎麼是空的呢?哇,還有這麼小的撲克牌呢!一看到teacher手中的撲克牌,小傢伙們乙個個的都興奮起來,迫不及待想要分享自己的見解呢...
撲克牌邏輯演算法
using system using system.collections.generic namespace gamelogic 撲克牌牌值採用16進製制 byte pokerarray 獲取花色 public static byte getpokerhua byte ipoker 獲取牌值 滿足...
變異的撲克牌演算法
一副撲克牌,除去大小王,首先我手裡有任意兩張牌 然後我要再在剩下的50張裡 抽出來5張 用我手裡的2張跟抽出來的5張組 成7張牌 其中只要有任意五張牌組成順子就行,求概率。要轉換一下思維,如果按照題目給定的思維進行思考的話,這個過程將會特別複雜 我們可以將這個看做一次性抽取七張牌的問題 那麼這個過程...