題目:
請設計乙個隨機洗牌系統,將52張除大小王外的撲克隨機發給4個人 ,並對每個人手中的牌進行排序後輸出。
排序規則:先按花色排,依次為黑桃、紅桃、梅花、方片,同花色的按點數從小到大排。其中,點數a視作點數1。
輸出格式:每人佔1行,相鄰兩張牌之間用1個空格分開。
分析:陣列card代表52張不同的撲克,其中10002000的代表黑桃牌,20003000的代表紅桃牌…依題目要求類推,由於篇幅問題,這個陣列並沒有展示完整。題目中的#include 的目的是每次隨機數組都能根據時間變化使rand函式獲得不同的數字,增大隨機性,洗牌環節是從52張牌中依次隨機取出1000對牌,進行混序,發牌是我是通過4個迴圈,1個迴圈變數增加4來代表給四個人發牌,也就是讓這打亂的52張牌的第一張發給玩家1,第二張牌發給玩家2……因為剛開始為了區分花色,我們用1000,2000,3000,4000代表了,所以這裡排序就相對簡單,直接讓一位玩家13張牌中的某1張牌分別與其他12張牌依次比較,進行13次即可。列印環節,用if語句通過比較數值的大小區分花色並減去相應的千分位列印出來這張撲克牌,因為要求先列印黑桃牌,然後紅桃,然後…,所以對於1位玩家我們設了4個迴圈,分別列印不同花色的牌。
#include
#include
#include
#define random(x,y) (rand()%x+y)
intmain()
;int i,j,a=
1000
,tmp;
int player1[13]
,player2[13]
,player3[13]
,player4[13]
;srand((
int)
time
(null))
;while
(a)//洗牌
for(i=
0,j=
0;i<
52,j<
13;i+=4
,j++
)//發給一號玩家的牌
for(i=
1,j=
0;i<
52,j<
13;i+=4
,j++
)//發給二號玩家的牌
for(i=
2,j=
0;i<
52,j<
13;i+=4
,j++
)//發給三號玩家的牌
for(i=
3,j=
0;i<
52,j<
13;i+=4
,j++
)//發給四號玩家的牌
for(i=
0;i<
13;i++
)//以下4個迴圈給每個玩家按題目指定排序
}}
for
(i=0
;i<
13;i++)}
}for
(i=0
;i<
13;i++)}
}for
(i=0
;i<
13;i++)}
}printf
("玩家一:");
//列印玩家的牌
for(i=
0;i<
13;i++
)printf
("\n");
printf
("玩家二:");
//列印玩家的牌
for
(i=0
;i<
13;i++
)printf
("\n");
printf
("玩家三:");
//列印玩家的牌
for(i=
0;i<
13;i++
)printf
("\n");
printf
("玩家四:");
//列印玩家的牌
for(i=
0;i<
13;i++
)printf
("\n");
return0;
}
執行結果:
撲克牌洗牌樣例
從網上摘抄的乙個洗牌程式的樣例 清雨空間與您分享程式設計的樂趣 以下是乙個基於c語言編寫的隨機 洗牌程式,程式先按順序生成一副紙牌,顯示紙牌,輸入洗牌次數,開始隨機洗牌,顯示洗牌結果 program by norm jen,include include includeint card 2 52 i...
撲克牌洗牌演算法 random shuffle
撲克牌洗牌有多種演算法 第1個 每次從原陣列a取出範圍 1,i 的數放入b陣列。缺點是每次都要將陣列i後面的元素進行移動。是乙個o n2 演算法 void xipai int n n for int i 1 i x i 第2種 每次取範圍 1,i 1 的數,然後與最後乙個元素做交換。這樣的複雜度優化...
模擬撲克牌的洗牌發牌
在記憶體中模擬出一副牌,然後模擬洗牌,發牌等動作 流程 構建一副牌儲存到乙個陣列中 洗牌 建立玩家 向玩家發牌 輸出每個玩家的牌 include include include include include 一副牌的數量 define card count 54 定義撲克的花色,黑,紅,梅,方,小...