Ir ao conteúdo

Posts recomendados

Postado

Olá é minha primeira vez aqui, sou iniciante em programação. Tenho que fazer um programa que seja um amigo secreto, que o usuário entre com quantas pessoas vão participar. Mas não estou saindo disso.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
        
    int Numpart;
    char AmigoSecreto[100],participantes[100], aux;
    int i, j;
    
    printf("..........................................................\n");      // entrada da  quantidade de participantes
    printf("Entre com o numero de participantes: ");
    scanf("%d", &Numpart);
    
    printf("..........................................................\n");
    printf("Caso tenha mais de um participante com o mesmo nome, entre com o sobrenome!\n");  
    for(i = 0; i < Numpart; i++){
    printf("Entre com o nome do participante (%d): ", i+1);                 // entrada dos nomes
    scanf("%s", &participantes[i]);
    
    }    
    
    //para realizar o sorteio
    for (i = 0; i < Numpart; i++) {
    int j = i + rand() % (Numpart - i);    
    aux = participantes[i];     // troca de posições
    participantes[i] = participantes[j];
    participantes[j] = aux;
    }

    printf("..........................................................\n");
    printf("O resultado do Amigo Secreto: \n");
    
    for (i = 0; i < Numpart; i++) {
    printf("Participante (%d) tirou: %s \n", i+1, participantes[i]); 
}

    return 0;
}

 

  • Curtir 1
Postado

Que tal assim?:

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

#define limparTela system("clear")  // No Windows mude para "cls"
#define separador "------------------------------------- \n"

typedef struct Participante {
    char nome[255];
    char pedido[255];
    bool escolhido;
    struct Participante *dupla;
} Participante_t;

int main() {
    const int maximo = 100;     // Quantidade máxima de participantes. Precisa ser par

    int qtdParticipantes = 0;   // Precisa ser par
    int posicao = 0;            // Posição de inserção de novos participantes, também indica a quantidade de participantes
    int posicaoSorteio = 0;     // Posição do participante sorteado para fazer dupla

    Participante_t participantes[maximo];   // Vetor com todos os participantes

    srand((unsigned) time(NULL));

    limparTela;
    do {
        // Garante que a quantidade seja válida
        printf("Quantidade de participantes [ Máximo: %i ]: ", maximo);
        scanf(" %i", &qtdParticipantes);
    } while (qtdParticipantes <= 0 || qtdParticipantes % 2 != 0 || qtdParticipantes > maximo);

    // Sequência de cadastro
    limparTela;
    printf(">> Cadastro \n");

    for (int i = 0; i < qtdParticipantes; ++i) {
        printf(separador);
        printf("Participante [ %i de %i ] \n", (i + 1), qtdParticipantes);
        printf("Nome: ");
        scanf(" %[^\n]s", participantes[posicao].nome);
        printf("Pedido: ");
        scanf(" %[^\n]s", participantes[posicao].pedido);
        participantes[posicao].escolhido = false;
        participantes[posicao].dupla = NULL;
        printf(separador);
        posicao++;
    }

    // Realizar o sorteio
    for (int i = 0; i < qtdParticipantes; ++i) {
        if (participantes[i].escolhido) {
            // Já foi escolhido. Passa para o próximo
            continue;
        }

        do {
            // O sorteado não pode ser o próprio participante e não pode ter sido escolhido
            posicaoSorteio = rand() % posicao;
        } while (posicaoSorteio == i || participantes[posicaoSorteio].escolhido);

        // Um vira dupla do outro e ambos são escolhidos
        participantes[i].dupla = &participantes[posicaoSorteio];
        participantes[posicaoSorteio].dupla = &participantes[i];
        participantes[i].escolhido = true;
        participantes[posicaoSorteio].escolhido = true;
    }

    // Exibe a relação de pedidos
    limparTela;
    printf(separador);
    for (int i = 0; i < qtdParticipantes; ++i) {
        printf("%15s quer %s \n", participantes[i].nome, participantes[i].pedido);
    }

    // Exibe a relação de duplas
    printf(separador);
    for (int i = 0; i < qtdParticipantes; ++i) {
        printf("%15s fez dupla com %s \n", participantes[i].nome, participantes[i].dupla->nome);
    }

    return 0;
}

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!