Выбрать 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