Jump to content

Menor diferença


polska
 Share

Recommended Posts

Bem pessoal, tenho fiz um exercício onde o objectivo era dado uns numeros, descobrir qual a menor diferença entre eles, por exemplo, a menor diferença entre 1 3 5 , é 2 ...

Bem, no inicio o programa deve pedir N, que é o numero de vezes que vou pedir numeros, depois para cada uma das vezes peço k, que é o numero de numeros que são dados.. Depois é so descobrir a menor diferença, N vezes..

Exemplo:

INPUT            OUTPUT

3(N)

5(k) 5 8 1 4 7      - >  1

3(k) 1 3 5          - > 2

4(k) 8 4 2 1     -> 1

Eu realizei o programa... e esta a dar tudo certinho, mas, seguindo esse exemplo, o 8 4 2 1 dá-me resultado 2 .. e eu não estou a perceber onde esta o erro, já fiz uma traçagem mas nao cheguei lá á mesma...

Este é o meu prog:

#include <stdio.h>

int main(){
int n,k,nums[1000],menorDiferenca=9999999,maior,menor;
scanf("%d",&n);
for(int i=1;i<=n;i++){
	scanf("%d",&k);
	for(int l=1;l<=k;l++){
		scanf("%d",&nums[l]);
	}
	for(int m=0;m<k;m++){
		for(int n=m;n<k;n++){
			if(nums[m]!=nums[n]){
				if(nums[m]>nums[n]){
					maior=nums[m];
					menor=nums[n];
				}else{
					maior=nums[n];
					menor=nums[m];
				}
				if(maior-menor<menorDiferenca){
					menorDiferenca=maior-menor;
				}

			}
		}
	}
	printf("%d\n",menorDiferenca);
	menorDiferenca=9999999;
}
return 0;
} 

PS: a var: menorDiferenca esta em 9999999 porque os valores que posso atribuir vao até 1 milhão.. logo a maior diferença possivel seria 1 milhao menos 1.. xD

Alguem me ajuda?

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Tens um erro aqui:

for(int l=1;l<=k;l++){

Os indices dos arrays começam em zero. Metendo os valores indicados vão ser atríbuidos assim :

nums[0] = ?

nums[1] = 8

nums[2] = 4

nums[3] = 2

nums[4] = 1

Depois nas comparações vais percorrer do indíce 0 ao 3. Logo dependendo do valor de nums[0] a menor diferença pode ser entre os nums[2] e nums[3].

Link to comment
Share on other sites

Tens um erro aqui:

for(int l=1;l<=k;l++){

Os indices dos arrays começam em zero. Metendo os valores indicados vão ser atríbuidos assim :

nums[0] = ?

nums[1] = 8

nums[2] = 4

nums[3] = 2

nums[4] = 1

Depois nas comparações vais percorrer do indíce 0 ao 3. Logo dependendo do valor de nums[0] a menor diferença pode ser entre os nums[2] e nums[3].

Eu até ia dizer que o que eu fiz estava correcto, porque eu pensava que nao estava a usar o k para mexer no array, mas estou, estou a usar para guardar os numeros nas posições do array, tens razão, obrigado já esta a funcionar direito ;D

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Bem, não querendo ser demasiado picuinhas...

picuinhas é bom. Quanto mais picuinhas melhor! 👍

Não há cá declarações de variáveis dentro do cabeçalho de ciclos for, isto não é Javascript...

Provavelmente é C99. A definição de variáveis dentro do cabeçalho do for, foi uma das boas novidades introduzidas na linguagem C padrão há 12 anos.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Provavelmente é C99. A definição de variáveis dentro do cabeçalho do for, foi uma das boas novidades introduzidas na linguagem C padrão há 12 anos.

Hmm verdade seja dita, na faculdade são forçadas as normas C99, mas mesmo em Windows a programar com a Win32 API com um compilador baseado no LCC, e mesmo no Visual C++, nunca me foi aceite declarações dentro de ciclos(cabeçalhos).

Estranho...

Link to comment
Share on other sites

Em Agosto de 2009/Janeiro de 2010, a situacao do Visual Studio em relacao a C99 era: "nao vamos implementar essa linguagem" (ver aqui e aqui).

Nao sei se entretanto alguma coisa mudou.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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.