Ir ao conteúdo

Posts recomendados

Postado

Gente minha lógica está errada, alguém poderia ajuda ? 

O link do enunciado: https://www.urionlinejudge.com.br/judge/pt/problems/view/1318

 

Meu programa apenas está apresentando saídas erradas.

 

#include <stdio.h>

int main()

{
    int n, m,  i, k, qtd=0;
    int t[10];

    scanf("%d %d", &n, &m);


     while (n != 0 || m != 0) {

    for (i = 0 ; i < m; i++) {

            scanf("%d", &t[i]);
            if(t[i] == t[i-1]){
                qtd++;
            }

        }


        printf("%d\n", qtd);
        qtd = 0;

        scanf("%d %d", &n, &m);


     }


    return 0;
}


 

Postado

Com relação à saída, cada o programa deve imprimir UMA linha.

 

21 minutos atrás, Leanderson Pinheiro disse:

printf("%d\n", qtd);

Esse comando aqui, imprime duas linhas, a segunda tem o ENTER ('\n')

  • Solução
Postado

Entrada

Citação

A entrada contém dados de diversos casos de teste. Cada caso de teste contém duas linhas. A primeira linha contém dois inteiros N e M, que indicam, respectivamente, o número de bilhetes originais e o número de pessoas presentes na festa (1 ≤ N ≤ 10000 e 1 ≤ M ≤  20000). A segunda linha do caso de testes contém M inteiros Ti representando os números dos bilhetes contidos no pacote que o diretor lhe deu (1 ≤ Ti ≤ N). O final da entrada é indicado por N = M = 0.

 

Saída

Citação

Para cada caso de teste seu programa deverá imprimir uma linha, contendo o número de bilhetes do pacote que contém outro bilhete com o mesmo número da sequência.

 

 

Rapidamente eu diria que a maioria dos usuários usou    tabela hash    para resolver.

São duas informações, a primeira entrada é capacidade (N + 1) do vetor (tabela hash) e a segunda

quantidade de chaves (índices para o vetor).

1 hora atrás, Leanderson Pinheiro disse:

Exemplo 6 10 / 6 1 3 6 6 4 2 3 1 2

Analisando essas informações, diria que o vetor (tabela hash) tema capacidade igual a 7

A quantidade de chaves é 10, ou seja, serão 10 entradas antes de fim.

 

Sempre que houver colisões, ou seja, o subscrito da tabela retorna um valor diferente de 0 incremente o contador, que no contexto do problema representa o acumulo de bilhetes falsos, ou não original.

 

Caso não haja colisão, ou seja o subscrito retorne 0, então esse é um bilhete original e precisa ser atribuído valor 1 no subscrito. Segue a ilustração

     6 10
     |                          6 1 3 6 6 4 2 3 1 2
     |                          | | | |
     |                          | | | |
hash[7] = {0};                  | | | |
// todos os subscritos são 0.   | | | |
                           hash[6] tem valor? 0 então atribuir 1
                             hash[1] tem valor? 0 então atribuir 1
                               hash[3] tem valor? 0 então atribuir 1
                                  hash[6] tem valor? 1 então colisão incrementar contador
                                  ...

A resposta final é 4 colisões: (6)x2, (3)x1, (2)x1

:) ]

 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!