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

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

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

Добрый день, подскажите пожалуйста как выбрать 10 карт (не повторяясь) из колоды карт
#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);
        }
на результат выдает не правильный (только первая строчка верна) Спасибо! 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
Листинг программы
#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;
}

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

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

  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
Похожие ответы