Ir ao conteúdo
  • Cadastre-se

C Como fazer algoritmo de sorteio de grupos


Billy05

Posts recomendados

Manos me ajudem nesse problema estou tendo dificuldades e meu código apresenta erros, alguém sabe como me ajudar

A prefeitura contratou um novo professor para ensinar as crianças do bairro a jogar tênis na quadra de tênis do parque municipal. O professor convidou todas as crianças do bairro interessadas em aprender a jogar tênis. Ao final do primeiro mês de aulas e treinamentos foi organizado um torneio em que cada participante disputou exatamente seis jogos. O professor vai usar o desempenho no torneio para separar as crianças em três grupos, de forma a ter grupos de treino em que os participantes tenham habilidades mais ou menos iguais, usando o seguinte critério: • participantes que venceram 5 ou 6 jogos serão colocados no Grupo 1; • participantes que venceram 3 ou 4 jogos serão colocados no Grupo 2; • participantes que venceram 1 ou 2 jogos serão colocados no Grupo 3; • participantes que não venceram nenhum jogo não serão convidados a continuar com os treinamentos. Dada uma lista com o resultado dos jogos de um participante, escreva um programa para determinar em qual grupo ele será colocado. Entrada A entrada consiste de seis linhas, cada linha indicando o resultado de um jogo do participante. Cada linha contém um único caractere: V se o participante venceu o jogo, ou P se o jogador perdeu o jogo. Não há empates nos jogos. Saída Seu programa deve produzir uma única linha na saída, contendo um único inteiro, identificando o grupo em que o participante será colocado. Se o participante não for colocado em nenhum dos três grupos seu programa deve imprimir o valor −1

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

int main (){

    int i = 0, cont;
    char jogos[6];

    while(i < 6){
        scanf("%c", &jogos[i]);
        i++;
    }

    while(i < 6){
        if(jogos[i] == 'V'){
            cont++;
        }
        i++;
    }

    if(cont == 5 || cont == 6){
        printf("\n3\n");
    }
    else if(cont == 3 || cont == 4){
        printf("\n2\n");
    }
    else if(cont == 1 || cont == 2){
        printf("\n1\n");
    }
    else{
        printf("\n-1\n");
    }

    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Billy05 Seu programa está muito complicado e sem razão para isso.

 

Não precisa de vetor nem desses loops todos. Nem de contadores.

 

Seu programa trata um único jogador. Só um. Seis partidas. Ganhou ou Perdeu. Nada mais.

 

Tem 4 possíveis saídas: -1, 1 2 ou 3.

 

Escreva em torno dos dados. É o simples. Muito mais simples. E não escreva o programa antes de entender os dados.

 

Um int
 

 int grupo = -1;   

 

Comece por isso. Ao ganhar um jogo o cara passa para o grupo 3. Ao ganhar 3 jogos passa para o grupo 2. Ao ganhar 5 jogos passa para o grupo 1.

 

E você mostra o grupo. Só isso. Não precisa sequer de um loop. Só vai ler 6 linhas com uma letrinha em cada uma. E não precisa de scanf() e esse trabalho todo. Use fgets()

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
#include <iostream>

using std::cout;
using std::cin;

int main() {

    char result, qnt_winning = 0;

    for (int i = 1; i <= 6; i++) {
        cin >> result;
        if (result == 'V') 
            qnt_winning++;
    }

    int group = -1;
    if (qnt_winning  >= 5)
        group = 1;
    else if (qnt_winning >= 3)
        group = 2;
    else if (qnt_winning > 0)
        group = 3;

    cout << group << "\n";


    return 0;
}

Acho que esse seria um código que responderia a questão. Tenta deixar teu código o mais reduzido possível. Nem sempre um código com muitas linhas (às vezes desnecessárias) é o mais eficiente. Espero ter ajudado 🙂 !

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

18 horas atrás, Abhner Adriel disse:
#include <iostream>

using std::cout;
using std::cin;

int main() {

    char result, qnt_winning = 0;

    for (int i = 1; i <= 6; i++) {
        cin >> result;
        if (result == 'V') 
            qnt_winning++;
    }

    int group = -1;
    if (qnt_winning  >= 5)
        group = 1;
    else if (qnt_winning >= 3)
        group = 2;
    else if (qnt_winning > 0)
        group = 3;

    cout << group << "\n";


    return 0;
}

Acho que esse seria um código que responderia a questão. Tenta deixar teu código o mais reduzido possível. Nem sempre um código com muitas linhas (às vezes desnecessárias) é o mais eficiente. Espero ter ajudado 🙂 !

@Billy05como o @Abhner Adrielescreveu o código em C++ e você está usando o C, basta apenas trocar a include para os padrões, remover os dois "using", e trocar o "cout/cin" por "printf/scanf (ou fgets que recomendo mais)". De resto, o código dele irá conseguir te ajudar com o que precisa

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!