Lendariopt Posted April 7, 2014 Report Share Posted April 7, 2014 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 More sharing options...
Lendariopt Posted April 7, 2014 Author Report Share Posted April 7, 2014 fui agora testar, dá erro na função gets, ou seja não posso usar Se eu usar scanf("%s",s); ele guarda apenas até o "espaço" Exemplo 5 6 3 4 o s fica o apenas 5 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 7, 2014 Report Share Posted April 7, 2014 esquece o gets (por completo) e o fgets (neste problema). se resolveres o problema com o scanf(" %d", %valor) não terias esses problema todos IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Lendariopt Posted April 7, 2014 Author Report Share Posted April 7, 2014 esquece o gets (por completo) e o fgets (neste problema). se resolveres o problema com o scanf(" %d", %valor) não terias esses problema todos mas os numeros colocados numa linha podem ser 2 como podem ser 1000 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 7, 2014 Report Share Posted April 7, 2014 mas os numeros colocados numa linha podem ser 2 como podem ser 1000 e? pelo código que apresentaste sabes fazer ciclos ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Warrior Posted April 7, 2014 Report Share Posted April 7, 2014 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. Link to comment Share on other sites More sharing options...
Lendariopt Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) 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 April 7, 2014 by Lendariopt Link to comment Share on other sites More sharing options...
Lendariopt Posted April 7, 2014 Author Report Share Posted April 7, 2014 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 More sharing options...
HappyHippyHippo Posted April 7, 2014 Report Share Posted April 7, 2014 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 por isso é que os dados de entrada dizem sempre quantos valores virão ... lê bem o enunciado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Lendariopt Posted April 7, 2014 Author Report Share Posted April 7, 2014 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now