Выбрать 10 карт из колоды не повторяясь - C (СИ)
Формулировка задачи:
Добрый день, подскажите пожалуйста как выбрать 10 карт (не повторяясь) из колоды карт
Спасибо!
и заполнить ее
на результат выдает не правильный (только первая строчка верна)
Спасибо!
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: ▒
#include <stdio.h> #include <stdlib.h> #include <time.h> struct card{ int value; char suit; }; struct board{ struct card deck[52]; }; int main(){ struct board b; createDeck(b); return 0; } void createDeck(struct board b){ int i =1; int counter = 1; int counter2 = 1; int counter3 = 1; int counter4 = 1; for(i=0; i< 52; i++){ if(i<13){ b.deck[i].value = counter; b.deck[i].suit = 'c'; counter++; } else if(i<26){ b.deck[i].value = counter2; b.deck[i].suit = 'd'; counter2++; } else if(i<39){ b.deck[i].value = counter3; b.deck[i].suit = 'h'; counter3++; } else if(i<52){ b.deck[i].value = counter4; b.deck[i].suit = 's'; counter4++; } } srand(time(0)); for(i=0; i< 10; i++){ printf("Card Value: %d Suit: %c \n", b.deck[i].value, b.deck[i].suit); } }
я пробовала создать еще одну структуру
struct hend{ struct card hend[10]; };
srand(time(0)); for(i=0; i<10; i++){ temp = rand()%52; if(b.deck[temp].value != 0){ a.hend[i].value = b.deck[temp].value; a.hend[i].suit = b.deck[temp].suit; b.deck[temp].value = 0; b.deck[temp].suit = NULL; break; } } for(i=0; i< 10; i++){ printf("Card Value: %d Suit: %c \n", a.hend[i].value, a.hend[i].suit); }
Решение задачи: «Выбрать 10 карт из колоды не повторяясь»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <time.h> #define DECK_SIZE 36 int main() { int cardChecked[DECK_SIZE]; memset(cardChecked, 0, DECK_SIZE * sizeof(int)); srand(time(NULL)); int i; int card; int suit; for (i = 0; i < 10; i++) { do { card = rand() % (DECK_SIZE / 4) + 1; suit = rand() % 4; } while (cardChecked[card + DECK_SIZE * suit] != 0); // подправь printf, чтобы карта выводилась в формате номинал - масть printf("%d of %d\n", card, suit); } return 0; }
Объяснение кода листинга программы
Вывод карт из колоды:
- 3 of spades
- 7 of hearts
- 10 of diamonds
- 4 of clubs
- 9 of hearts
- 6 of diamonds
- 2 of spades
- 5 of hearts
- 8 of clubs
- 7 of clubs
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д