fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. void shuffle(int [][13]);
  5. void print_trump(int [][13], int*, int*);
  6. int main(void){
  7. int trump_mark[4] = {100, 200, 300, 400}; //トランプの「柄」を格納する配列(print_trump関数内での表示用)
  8. int trump_num[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; //トランプの「数字」を格納する配列(print_trump関数内での表示用)
  9.  
  10. int deck[4][13]={0}; //52枚のトランプの各要素は、それぞれどのトランプなのか決まっている(例:deck[0][0]:ハートのエース)。この配列に順番を記録する
  11.  
  12. srand(time(NULL));
  13. shuffle(deck);
  14. print_trump(deck, trump_mark, trump_num);
  15.  
  16. return 0;
  17. }
  18. void shuffle(int de[][13]) //初期化(すべての配列の値0)された(つまり、まだ引く順番が決まっていない)トランプを受け取る
  19. {
  20. int card_num, row, column;
  21.  
  22. for(card_num=1; card_num<=52; card_num++){ //シャッフルによって、デッキからランダムに引かれたトランプ(の要素)に1-52の数字を格納していく
  23. do{
  24. row = rand()%4; //要素番号:0,1,2,3のいずれか1つを選択
  25. column = rand()%13; //要素番号:0,1,2,3,4,5,6,7,8,9,10,11,12のいずれか1つを選択
  26.  
  27. }while(de[row][column] !=0); //選択したトランプ(例:エースの1)に「順番」が既に割り当てられているならやり直し(再度トランプを選択)
  28.  
  29. de[row][column] = card_num; //トランプの各要素に1-52までの番号を振る
  30. }
  31. }
  32. //card_numの番号通りにカードを表示する関数(シャッフルされたトランプを表示する関数)
  33. void print_trump(int de[][13], int *tm, int *tn)
  34. {
  35. int card_num, row, column;
  36.  
  37. for(card_num=1; card_num<=52; card_num++){
  38. for(row=0; row<4; row++){
  39. for(column=0; column<13; column++){
  40. if(de[row][column] == card_num){ //トランプが引かれる順番とcard_num番号が一致したら表示する
  41. printf("%2d:%d-%d\n", card_num, tm[row], tn[column]);
  42. }
  43. }
  44. }
  45. }
  46. }
Success #stdin #stdout 0s 5288KB
stdin
3
stdout
 1:300-4
 2:200-1
 3:100-9
 4:100-13
 5:200-10
 6:400-3
 7:400-4
 8:400-13
 9:400-5
10:300-5
11:200-13
12:200-4
13:300-6
14:300-9
15:100-5
16:400-1
17:400-10
18:300-13
19:100-8
20:400-9
21:100-2
22:200-7
23:200-2
24:400-7
25:300-2
26:300-10
27:100-7
28:300-3
29:200-8
30:400-8
31:100-1
32:300-7
33:100-3
34:100-11
35:400-2
36:200-6
37:300-12
38:200-9
39:200-5
40:400-6
41:200-3
42:200-12
43:200-11
44:100-6
45:100-10
46:300-8
47:400-11
48:300-11
49:100-4
50:100-12
51:400-12
52:300-1