Ir para conteúdo
Fórum Script Brasil
  • 0

Carteado Em C


Guh!

Pergunta

Galera é o seguinte, estou tentando fazer um algoritmo em C para distribuiçao de cartas em uma mesa de poker. Primeiramente eu preciso fazer um vetor que receba valores de 0 a 51 (um baralho completo de poker possui 52 cartas).

O problema é que quando eu gero os numeros aleatórios eu preciso que não haja repetiçao de numeros no vetor, é isso que eu não estou conseguindo fazer.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

main()
{
      
       int cartas=52, i, j, Carta[cartas];
       srand(time(NULL)); 
                     
       for(i=1; i<=cartas; i++) {
                Carta[i]=(rand() % 52); } // Gera numeros aleatórios de 0 a 51
       
       for(i=1; i<=cartas; i++) { 
                printf("Carta[%d] = %d\n", i, Carta[i]); } // imprime o vetor na tela
                
       getch(); 
}

O Arquivo compilado ficou assim: (reparem que há alguns numeros repetidos como o 3, 6, 30, 34... tem mais que se repetem, mais de uma vez, só citei esses como exemplo)

Carta[1] = 11

Carta[2] = 2

Carta[3] = 28

Carta[4] = 33

Carta[5] = 51

Carta[6] = 50

Carta[7] = 43

Carta[8] = 31

Carta[9] = 34

Carta[10] = 14

Carta[11] = 5

Carta[12] = 9

Carta[13] = 21

Carta[14] = 29

Carta[15] = 20

Carta[16] = 32

Carta[17] = 10

Carta[18] = 6

Carta[19] = 6

Carta[20] = 30

Carta[21] = 45

Carta[22] = 37

Carta[23] = 27

Carta[24] = 6

Carta[25] = 3

Carta[26] = 3

Carta[27] = 21

Carta[28] = 30

Carta[29] = 47

Carta[30] = 6

Carta[31] = 28

Carta[32] = 19

Carta[33] = 45

Carta[34] = 38

Carta[35] = 18

Carta[36] = 12

Carta[37] = 40

Carta[38] = 23

Carta[39] = 1

Carta[40] = 4

Carta[41] = 11

Carta[42] = 36

Carta[43] = 43

Carta[44] = 33

Carta[45] = 32

Carta[46] = 15

Carta[47] = 16

Carta[48] = 5

Carta[49] = 49

Carta[50] = 18

Carta[51] = 34

Carta[52] = 32

Como eu faço para ter os numeros no vetor (numeros de 0 a 51) sem repetiçao ???

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Primeiramente preencha o vetor com os numeros em ordem (de 0 ateh 51). Depois faca um for que vai de 0 ateh 51 (ou seja, é executado 52 duas vezes). Dentro desse for, sorteie duas posicoes aleatorias e faca a troca delas. Isso lhe dara um vetor com os numeros embaralhados uniformemente (Da pra provar estatisticamente que isso funciona, mas não lembro direito como se faz)

Link para o comentário
Compartilhar em outros sites

  • 0

Como hoje estou de bom humor, faça o seguinte:

Preencha seu baralho de 1 até 51. depois use essa função pra embaralhar. Fiz esta função pro meu programa que era pra jogar Sueca. :)

A variavel posicao é uma variavel que usei para os seguitnes fins:

Quando eu dar uma mao de cartas pra alguém, o tamanho do baralho diminui, certo? então, foi isso. Qd você da uma mao de 7 cartas, o posicao fica 51 - 7.

void baralho::emb_monte() {

int repeticoes = 100;

for (int i = 0; i < repeticoes; i++) {

int a = rand() % (52 - posicao) + posicao;

int b = rand() % (52 - posicao) + posicao;

int aux = cartas[a];

cartas[a] = cartas;

cartas = aux;

}

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...