Ir ao conteúdo
  • Cadastre-se

C++ <repetição em c++> problema


Posts recomendados

Madame Rachel possui uma mansão onde ela recebe todos os seus descendentes (netos e bisnetos) durante as férias. Sua mansão possui exatamente N quartos (cada quarto é numerado de 1 a N), onde N é também a quantidade de netos e bisnetos (cada descendente é também numerado de 1 a N). Como toda criança, os descendentes de Madame Rachel são bastante travessos. Todo dia sempre fazem a mesma brincadeira: eles acordam de manhã cedo antes dela e se encontram no grande jardim. Cada descendente, um de cada vez, entra na mansão e troca o estado das portas dos quartos cujos números são múltiplos do seu identificador. Trocar o estado de uma porta significa fechar uma porta que estava aberta ou abrir uma porta que estava fechada. Por exemplo, o descendente cujo identificador é igual a 15 vai trocar o estado das portas 15, 30, 45, etc. Considerando que todas as portas estão inicialmente fechadas (todos os descendentes fecham as portas antes de descer para o jardim) e que cada descendente entra exatamente uma vez na mansão em uma ordem completamente aleatória, quais portas estarão abertas após a entrada de todos os descendentes na mansão?

Entrada vai ser o numero de quartos (e tmb descendentes)
Saida vai ser todas as portas que estarão abertas 

EX: 

1 4

Como faço isso?

Link para o comentário
Compartilhar em outros sites

C++ é uma linguagem que facilita muito escrever esse tipo de coisa. Talvez por ter sido escrita com esse propósito :)

"Abstrações com custo zero" foi o motivo principal de escrever essa linguagem, segundo... seu criador.

 

O caminho simples, sem inventar: crie uma classe Mansao com N quartos, e N descendentes. Nem precisa ter os dois na  verdade, porque basta um vetor de N itens, que podem ser bool ou char ou int ou qualquer coisa. É que assim fica mais representativo em relação ao enunciado


Por exemplo:


class Mansao
{
private:
    void sorteio();

public:

    int     N; // os descendentes e quartos
    char*   descendentes;
    bool*   porta_aberta;

    Mansao();
    Mansao(int);

    void no_jardim();
};

no_jardim() chama sorteio que cria uma ordem aleatória dos N caras. E depois um único loop até N define o estado das portas. Ao final do loop mostra o resultado com as portas que estão abertas...

adicionado 1 minuto depois

Mansao() cria um exemplo como o do enunciado, com 6 portas. Mansao(n) cria uma Mansao com n portas, claro. Pode ser a mesma função...

  • Obrigado 1
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...