Jump to content

Treinos - Olimpiadas de Informática


Lendariopt
 Share

Recommended Posts

Como é um Treino penso que não existe mal em pedir ajuda

Eu estou com problemas no exercicio E

Enunciado:

O problema

Dado um conjunto de números diferentes, qual será o par de números que tem uma menor diferença entre si? Ou, dito de outro modo, qual será o par de números mais "próximo" um do outro?

Por exemplo, imagina os números 5 8 1 4 7. O par de números mais próximo é o 4 e o 5, que têm uma diferença entre si de 1.

A tua tarefa é precisamente receber um conjunto de números, descobrir o par que tem menor diferença e escrever essa diferença.

Input

A primeira linha de input contém um número N (1 ≤ N ≤ 100), que corresponde ao número de casos a processar.

Seguem-se exactamente N linhas. Cada uma dessas linhas começa por conter K (2 ≤ K ≤ 1000). Depois vêm exactamente K números, indicando o conjunto de números a considerar (é garantido que não aparecem números iguais e que os números são inteiros positivos menores que um milhão).

Vê o exemplo, para esclarecer eventuais dúvidas, sendo que o primeiro caso a processar corresponde ao exemplo dado em cima.

Output

O output deve conter no início uma única linha contendo o número N.

Devem-se seguir-se N linhas contendo cada uma a diferença mínima encontrada entre um par de números, como descrito atrás. Nota que esta diferença deve ser sempre um número positivo. Se existirem vários pares com a mesma diferença mínima, não faz mal, pois irás imprimir precisamente só o valor dessa diferença.

Exemplo de input/output

Input

3

5 5 8 1 4 7

3 1 3 5

4 8 4 2 1

Output

3

1

2

1

O que eu fiz:

int main()
{
 int a,i,j,k,g;
 char s[1000];
 scanf("%d",&a);
 printf ("%d\n",a);
 gets(s);

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

        gets(s);

        g=2000;
        for(j=0;j<strlen(s);j++)
        for (k=0;k<=strlen(s);k++)    
        if (g > s[k]- s[j] && s[k]- s[j] > 0)
        g = s[k] - s[j];
        printf ("%d\n",g);
 }
 return 0;
}

Problema nesse codigo: Só funciona se os numeros forem menores de 10, por exemplo:

10 15 5 30 16

vai dar errado porque ele não ve "10" mas ve "1" e "0"

o meu problema é que o nº de numeros varia (no 1º input sao 6, no 2º sao 4 e no 3º sao 5) (se resolver esse problema resolvo o exercicio)

Alguem pode ajudar?

PS:Estou usando string para poder comparar e os numeros da tabela ascii

Link to comment
Share on other sites

e?

pelo código que apresentaste sabes fazer ciclos ...

Mas eu não posso pedir algo que nãosei, se o "programa que avalia" colocar 5 numeros e eu pedir 6 ou colocar 300 e eu pedir 10 vai dar errado

verifica os 5 testes que foram feitos da ultima vez

The input

//6

//5 5 8 1 4 7

//3 1 3 5

//4 8 4 2 1

//10 2348 985 34589 89389 4783 20 39485 55555 181818 10000

Isto é apenas 1 linha<--//136 65710 74319 48620 62494 74332 44628 44695 75700 21984 83436 29733 30892 84359 52344 78762 65289 29047 53659 57517 52188 58893 30737 21098 36729 25790 74177 98718 23714 28804 53437 64839 94514 44108 29811 73360 18440 90791 18055 94140 12775 17844 40225 60020 2203 92569 55134 67493 37969 8793 25010 90157 84038 72100 27607 20767 14242 18137 19485 37956 63293 89275 19147 74159 33383 65310 47519 68176 56101 81927 62316 85229 99771 2542 45249 1974 11463 383 85819 49432 9176 10830 55941 93214 99282 99901 30334 13524 18038 49819 67832 97683 55446 3332 71842 88830 84994 19361 57006 41096 1288 35674 26325 1059 54568 71574 19386 66032 88309 5205 31816 97485 32387 4110 7051 31669 4011 37385 61545 38401 3557 45730 36084 59003 65414 7926 47833 50408 43639 21191 7856 44928 56866 50533 62339 27786 38459

Isto é outra linha <--//39 8081 37665 43054 86147 32863 42434 98796 89422 59630 73406 15792 6843 94625 67215 69327 18986 10364 19116 56546 96610 98097 65040 17283 72018 13255 11073 96337 27068 27112 83508 85541 51546 37525 28595 54045 70389 87381 52841 59811

should give

6

1

2

1

965

13

44

supostamente daria certo nos 3 primeiros e errado nos 3 ultimos o meu programa

Já agora, podias colocar o enunciado completo em vez de só a especificação do input/output.

De resto, faz o que o HHH sugeriu.

*Corrigido

Edited by Lendariopt
Link to comment
Share on other sites

Já agora, podias colocar o enunciado completo em vez de só a especificação do input/output.

De resto, faz o que o HHH sugeriu.

Eu n devo ter entendido, o meu problema mantem-se, é um numero aleatorio de valores e eu não sei ou não estou a conseguir "ver" como vou "prever" o numero que vai ser colocado, se é 2 ou 1000.

Link to comment
Share on other sites

Vou resolver este exercicio e vou dormir a seguir (sempre soube que a minha atenção é o meu ponto fraco) desculpem pelo incomodo, agora é que li bem o enunciado percebi que foi uma falta de atenção na minha parte, Boa noite HappyHippiHippo e Obrigado 🙂

Podem fechar o tópico 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.