fork download
  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. using namespace std;
  5.  
  6. int players_cards[5][14]; // [][]матрица, карты на руках игроков
  7. // [][0] выдано карт по мастям
  8. // [0][0] количество полностью выданных мастей
  9. // [0][] Зарезервировано
  10. int players = 6;
  11. int deals = 2; // количество раздач после первой
  12.  
  13. void dispenser(int s, int p){ // выдаём карту игроку
  14. int offset = rand() % (13 - players_cards[s][0]); // по случайному смещению
  15. int card = 1;
  16.  
  17. while(players_cards[s][card] || offset){ // из списка имеющихся карт
  18. if(!players_cards[s][card]) offset --;
  19. card++;
  20. }
  21. players_cards[s][card] = p;
  22. if (++players_cards[s][0] >= 13) players_cards[0][0]++; // если не осталось карт этой масти, их выбор сокращается
  23. }
  24.  
  25. int main(void) {
  26. char cards[] = "2 3 4 5 6 7 8 9 0 J Q K A";
  27. char suits[] = " HDCS";
  28.  
  29. srand(time(NULL));
  30.  
  31. for(int i = 0 ; i <= 4; i++) // обнуляем маccив выданных карт
  32. for(int j = 0 ; j <= 13; j++)
  33. players_cards[i][j] = 0;
  34.  
  35. for(int p = 1 ; p <= players ; p++) // каждому игроку
  36. for(int suit = 1; suit <= 4; suit++) // каждой масти по 1
  37. dispenser(suit, p);
  38.  
  39. for(int k = 0; k < deals && players_cards[0][0] < 4; k++) // и теперь то что осталось раздаём K раз
  40. for(int p = 1 ; p <= players && players_cards[0][0] < 4; p++){ // каждому игроку
  41. int offset = rand() % (4 - players_cards[0][0]); // по случайному смещению
  42. int suit = 1;
  43. while(players_cards[suit][0] >= 13 || offset){ // из списка имеющихся мастей (выдано <13)
  44. if(players_cards[suit][0] < 13) offset--;
  45. suit++;
  46. }
  47. dispenser(suit, p);
  48. }
  49.  
  50. printf(" | %s\n",cards);
  51. printf("------------------------------------------\n");
  52. for(int i = 1 ; i <= 4; i++){
  53. printf("%c|",suits[i]);
  54. for(int j = 1 ; j <= 13; j++)
  55. if (players_cards[i][j] > 0)
  56. printf("%2d ", players_cards[i][j]);
  57. else
  58. printf(" ");
  59. printf("| All cards: %d\n", players_cards[i][0]);
  60. }
  61. return 0;
  62. }
Success #stdin #stdout 0s 4532KB
stdin
Standard input is empty
stdout
 | 2  3  4  5  6  7  8  9  0  J  Q  K  A
------------------------------------------
H| 4  3     1  4  3  5  2  6  3        6 | All cards: 10
D| 4  1     3  6  2     1  5     5  6  5 | All cards: 10
C| 5  4  3  2     4           2     6  1 | All cards: 8
S| 1  5  2        4        1     6  3  2 | All cards: 8