Выбрать 10 карт из колоды не повторяясь - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, подскажите пожалуйста как выбрать 10 карт (не повторяясь) из колоды карт
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. struct card{
  6. int value;
  7. char suit;
  8. };
  9.  
  10. struct board{
  11. struct card deck[52];
  12. };
  13.  
  14. int main(){
  15. struct board b;
  16. createDeck(b);
  17. return 0;
  18. }
  19.  
  20. void createDeck(struct board b){
  21. int i =1;
  22. int counter = 1;
  23. int counter2 = 1;
  24. int counter3 = 1;
  25. int counter4 = 1;
  26.  
  27. for(i=0; i< 52; i++){
  28. if(i<13){
  29. b.deck[i].value = counter;
  30. b.deck[i].suit = 'c';
  31. counter++;
  32. }
  33. else if(i<26){
  34. b.deck[i].value = counter2;
  35. b.deck[i].suit = 'd';
  36. counter2++;
  37. }
  38. else if(i<39){
  39. b.deck[i].value = counter3;
  40. b.deck[i].suit = 'h';
  41. counter3++;
  42. }
  43. else if(i<52){
  44. b.deck[i].value = counter4;
  45. b.deck[i].suit = 's';
  46. counter4++;
  47. }
  48. }
  49. srand(time(0));
  50.  
  51. for(i=0; i< 10; i++){
  52. printf("Card Value: %d Suit: %c \n", b.deck[i].value, b.deck[i].suit);
  53. }
  54. }
Спасибо!
я пробовала создать еще одну структуру
Листинг программы
  1. struct hend{
  2. struct card hend[10];
  3. };
и заполнить ее
Листинг программы
  1. srand(time(0));
  2. for(i=0; i<10; i++){
  3. temp = rand()%52;
  4. if(b.deck[temp].value != 0){
  5. a.hend[i].value = b.deck[temp].value;
  6. a.hend[i].suit = b.deck[temp].suit;
  7. b.deck[temp].value = 0;
  8. b.deck[temp].suit = NULL;
  9. break;
  10. }
  11. }
  12. for(i=0; i< 10; i++){
  13. printf("Card Value: %d Suit: %c \n", a.hend[i].value, a.hend[i].suit);
  14. }
на результат выдает не правильный (только первая строчка верна) Спасибо! Card Value: 11 Suit: c Card Value: 3670071 Suit: 9 Card Value: 6619245 Suit: \ Card Value: 6226024 Suit: 2 Card Value: 3211313 Suit: \ Card Value: 7012463 Suit: Card Value: 6619182 Suit: x Card Value: 0 Suit: f Card Value: 2949230 Suit: Card Value: -2147417600 Suit: ▒

Решение задачи: «Выбрать 10 карт из колоды не повторяясь»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4.  
  5. #define DECK_SIZE 36
  6.  
  7. int main()
  8. {
  9.     int cardChecked[DECK_SIZE];      
  10.     memset(cardChecked, 0, DECK_SIZE * sizeof(int));    
  11.    
  12.     srand(time(NULL));
  13.  
  14.     int i;
  15.     int card;
  16.     int suit;
  17.  
  18.     for (i = 0; i < 10; i++)
  19.     {
  20.         do
  21.         {
  22.             card = rand() % (DECK_SIZE / 4) + 1;
  23.             suit = rand() % 4;
  24.         } while (cardChecked[card + DECK_SIZE * suit] != 0);          
  25.         // подправь printf, чтобы карта выводилась в формате номинал - масть
  26.         printf("%d of %d\n", card, suit);
  27.     }
  28.    
  29.     return 0;
  30. }

Объяснение кода листинга программы

Вывод карт из колоды:

  1. 3 of spades
  2. 7 of hearts
  3. 10 of diamonds
  4. 4 of clubs
  5. 9 of hearts
  6. 6 of diamonds
  7. 2 of spades
  8. 5 of hearts
  9. 8 of clubs
  10. 7 of clubs

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы