C演算法程式設計題(一)撲克牌發牌

2021-09-22 07:23:25 字數 2126 閱讀 2303

程式描述:

一副紙牌有52張,4種花色,每種花色13張。我們能用乙個整數m就表示出所有的52種情況,規則是:

m / 13: =0: 紅心,=1: 方塊,=2: 梅花,=3: 黑桃

m % 13:  =0:2,=1:3,=2:4 ....  =8:10,=9:j,=10:q,=11: k,=12:a

比如:m = 15 就表示:方塊4  m=38表示:梅花a

我們希望用程式模擬1副撲克牌隨機抽取13張,發給某人的過程。

發牌後需要排序:規則是:先按花色,再按點數。花色的大小順序是:梅花、方塊、紅心、黑桃。點數的順序是:2、3、4、…. 10、j、q、k、a。

然後,挑選出最大的連續牌型。規則是:連續張數多的大。張數相等的則花色大的大(此時與點數無關)。

我們先分析下,上面的題目要求描述的很清楚了,我們要實現三個步驟:1,發牌(隨機)2,排序 3,輸出最大的連續牌型。

1,發牌

這個比較簡單,我直接貼下**:

1

int m,k=0

,i,j,l,t,x,y;

2int puke[4][13]=;

3int w[4]=;

4char point[13]=;

5srand(time(null));

6while(k<13)7

15 puke[x][y]=1

;16 printf("

%c",x+3

);17

if(y==8)18

21 printf("

%c "

,point[y]);

22 k++;

23 }

這裡我們用point陣列儲存點數,puke陣列的下標分別儲存花色和點數,值為1表示這張牌已經發了,x+3是花色的轉義字元。

2,排序

其實這個也好實現,因為我們儲存的發牌在puke陣列中,排序規則是先按花色,再按點數,這裡我們用笨方法,用四個for迴圈就可以實現,分別遍歷puke陣列。

示例**:

1

for(j=0;j<13;j++)

210 printf("

%c "

,point[j]);11}

12}13for(j=0;j<13;j++)

1422 printf("

%c "

,point[j]);23}

24}25for(j=0;j<13;j++)

2634 printf("

%c "

,point[j]);35}

36}37for(j=0;j<13;j++)

3846 printf("

%c "

,point[j]);47}

48 }

3,輸出最大的連續牌型

示例**:

1

int count[4]=;

2int index[4]=;

3int temp=0;

4for(i=0;i<4;i++)514

else

1521 temp=0;22

}23}24

}25 count[i]++;26}

2728

int max=0; 29

if(count[3]>max)

3034

for(i=0;i<3;i++)

3541}42

43int a=index[temp]-max;

44for(i=0;i)

4551 printf("

%c "

,point[a]);

5253 a++;

54 }

count陣列的意思是各個花色牌連續最大數,index陣列儲存的是開始各個花色連續的開始點數,就是point陣列的下標。

實現效果:

全部程式**:

當然這只是實現的一種方法,可能園友有更好的實現方法,歡迎指點。。。

C演算法程式設計題(一)撲克牌發牌

上週寫 我的程式設計開始 c 這篇文章的時候,說過有時間的話會寫些演算法程式設計的題目,可能是這兩天週末過的太舒適了,忘記寫了。下班了,還沒回去,閒來無事就寫下吧。因為寫c 的程式設計題和其他語言實現功能不一樣,要動腦子,寫筆記,思考整個的流程。就比如實現字串擷取,c 直接乙個substring搞定...

洗牌 發牌演算法 打亂撲克牌順序

洗牌的演算法有很多,這裡主要介紹下幾種主要的演算法。方法一 每次找乙個隨機的位置,然後將這54個數放到找的位置中。步驟 1.用乙個整型陣列記錄各個位置是否已經放置了數,如果放置了則不為0,否則為0。所以在演算法開始的時候,初始化此陣列每個元素的值都為0.2.每次產生乙個0 53之間的數,看這個位置是...

撲克牌的隨機發牌程式

乙個撲克牌遊戲 準確的說就是 鬥地主 本來是打算取0 53的隨機數,取過的就做乙個標識,迴圈直至全部完。但是細想一下,效率實在是太低了,最後決定用亂序的方式,感覺還不錯。不知道還有沒有更好的辦法,請大家多多指教!using system using system.collections namesp...