PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.
Moderadores: Administradores, Moderadores
por luis7 » Quinta Abr 09, 2009 20:43
Olá pessoal,
Estou a precisar da vossa ajuda, para o seguinte: Tenho um array com 20 numeros inteiros e queria q o programa me indicasse onde começa a primeira serie de numeros crescentes:
Por exemplo para este array de 14 numeros:
8 5 6 2 4 6 9 4 2 0 8 9 10 12, etc
A primeira serie crescente começa no indice 3 do array e vai até ao indice 6 (q sao os numeros 2 4 6 9) e a segunda começa no indice 9 e vai até ao 13 (numeros 0 8 9 10 12).
Eu queria obter como resultado a serie crescente mais longa, q neste caso seria a segunda q dei como exemplo( numeros 0 8 9 10 12).
Alguém sabe como fazer?
Muito obrigado e boa páscoa.
-
luis7
- Novato

-
- Mensagens: 1
- Registado: Quinta Abr 09, 2009 20:22
por vamosAeles » Quinta Abr 09, 2009 21:02
Boas,
percorres o array e vais mantendo o indice da serie mais longa até ao momento tipo:
int nums[] = {........};
int indice = 0;
int maiorComp = 0;
int compAct = 1;
for(int i = 1; i < numsl.lenght; i++){
if(nums[i] > nums[i]){
compAct++;
}
else{
if(compAct > maiorComp){
maiorComp = compAct;
indice = i - maiorComp; 1 2 3 2 3 4 5 6 7
}
compAct = 1;
}
}
if(compAct > maiorComp){
maiorComp = compAct;
indice = numsl.lenght - maiorComp; 1 2 3 2 3 4 5 6 7
}
Será algo assim, testa a ver se funca
[[[]]]
-
vamosAeles
- Membro de Prata

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por LuisFilipe » Sexta Abr 10, 2009 0:02
Vamos ver se entendo
- Código: Seleccionar todos
int nums[] = {........}; // array com numeros
int indice = 0; // inicio seq
int maiorComp = 0; // num de numeros seq
int compAct = 1; // comprimento actual
for(int i = 1; i < numsl.lenght; i++){ // ciclo 1 .. max-1
if(nums[++i] > nums[i]){ // num seg > num actual
.................................^^ faltava ?
- Código: Seleccionar todos
compAct++; // incrementa comp Actual
}
else{ // se não (quebra na seq)
if(compAct > maiorComp){ // se o novo com > que o maior
maiorComp = compAct; // actualiza o Maior comp
indice = i - maiorComp; // inicio da sequencia
}
compAct = 1; // reinicia compAct
}
}
if(compAct > maiorComp){ // verificar de novo
maiorComp = compAct; // actualiza o Maior comp
indice = numsl.lenght - maiorComp; // inicio da sequencia
}
-
LuisFilipe
- Membro Diamante

-
- Mensagens: 1270
- Registado: Domingo Set 04, 2005 22:12
por jmsr » Sexta Abr 10, 2009 7:47
Olá,
Obrigado pelas respostas. Quando executo o código, ele diz sempre q a posição onde começa a maior série de numeros crescentes é 1, o q n é verdade
Alguém sabe dizer o que está mal?
- Código: Seleccionar todos
public static void maiorSerie()
{
int [] tab1= {1, 0, 4, 2, 9, 3, 2, 4, 8};
int indice = 0; // inicio seq
int maiorComp = 0; // num de numeros seq
int compAct = 1; // comprimento actual
for(int i = 1; i < tab1.length; i++) // ciclo 1 .. max-1
{
if(tab1[++i] > tab1[i]) // num seg > num actual
{
compAct++; // incrementa comp Actual
}
else // se não (quebra na seq)
{
if(compAct > maiorComp) // se o novo com > que o maior
{
maiorComp = compAct; // actualiza o Maior comp
indice = i - maiorComp; // inicio da sequencia
}
compAct = 1; // reinicia compAct
}
}
if(compAct > maiorComp) // verificar de novo
{
maiorComp = compAct; // actualiza o Maior comp
indice = tab1.length - maiorComp; // inicio da sequencia
}
System.out.println("Posição onde começa a maior série de números por ordem crescente é: " +indice);
}
-
jmsr
- Novato

-
- Mensagens: 3
- Registado: Sexta Abr 10, 2009 0:32
por bigslb » Sexta Abr 10, 2009 12:30
kek usas(usam) para executar isso??
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
-
bigslb
- Membro Diamante

-
- Mensagens: 1426
- Registado: Quinta Ago 18, 2005 17:16
- Localização: Massamá
por vamosAeles » Sexta Abr 10, 2009 13:19
- Código: Seleccionar todos
if(tab1[++i] > tab1[i]) // num seg > num actual
Essa condição não esta correcta :p
++i incrementa a variavel i (não é o mesmo que i + 1)
ie, essa condição nunca vai ser verdadeira
Assim como o i se inicia a 1, já nunca irá verificar a posicao 0, mesmo que em vez de ++1 estivesse i + 1
Já agora, no esboço que pus, onde está 'if(nums[i] > nums[i]){ ' deveria ser 'if(nums[i] > nums[i-1]){ '... óbvio que tinha posto mal.
PS - o código postado no post antes é compativel com JAVA
[[[]]]
-
vamosAeles
- Membro de Prata

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por LuisFilipe » Sexta Abr 10, 2009 14:17
vamosAeles Escreveu:- Código: Seleccionar todos
if(tab1[++i] > tab1[i]) // num seg > num actual
Essa condição não esta correcta :p
++i incrementa a variavel i (não é o mesmo que i + 1)
ie, essa condição nunca vai ser verdadeira
Assim como o i se inicia a 1, já nunca irá verificar a posicao 0, mesmo que em vez de ++1 estivesse i + 1

Já agora, no esboço que pus, onde está 'if(nums[i] > nums[i]){ ' deveria ser 'if(nums[i] > nums[i-1]){ '... óbvio que tinha posto mal.
PS - o código postado no post antes é compativel com JAVA
[[[]]]
Tens razão ó 31 quem ferve a 90º é o ângulo recto...
claro que poderia ser if(nums[--i] > nums[++i])
Acho que é costume usar o seguinte
for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){
ou seja o incremento de i é feito na comparação e esta vai de 0 ao maximo -1 ou seja num array com 10 ele compara i[9] com i[++9] e quebra no proximo for, digo eu.
ou então tem que acabar em <= numsl.lenght;
caso contrário nunca compara o ultimo
e ainda usas
numsl.lenght não deveria ser
nums.lenght
julguei que era C, sendo assim não sei se // serve de comentário
-
LuisFilipe
- Membro Diamante

-
- Mensagens: 1270
- Registado: Domingo Set 04, 2005 22:12
por vamosAeles » Sexta Abr 10, 2009 15:06
LuisFilipe Escreveu:Tens razão ó 31 quem ferve a 90º é o ângulo recto...
claro que poderia ser if(nums[--i] > nums[++i])
Acho que é costume usar o seguinte
for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){
ou seja o incremento de i é feito na comparação e esta vai de 0 ao maximo -1 ou seja num array com 10 ele compara i[9] com i[++9] e quebra no proximo for, digo eu.
ou então tem que acabar em <= numsl.lenght;
caso contrário nunca compara o ultimo
e ainda usas
numsl.lenght não deveria ser
nums.lenghtjulguei que era C, sendo assim não sei se // serve de comentário
take it easy...
1) "claro que poderia ser if(nums[--i] > nums[++i])

"
Nunca disse o contrário
2) "for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){ ""
Repara que no último ciclo ele vai tentar aceder a uma posição(indice) que já não faz parte do array.
3) // tb serve em Java

As tags pros coments em C e Java são as mesmas
[[]]
-
vamosAeles
- Membro de Prata

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por LuisFilipe » Sexta Abr 10, 2009 15:38
vamosAeles Escreveu:take it easy...
No sweat...
vamosAeles Escreveu:1) "claro que poderia ser if(nums[--i] > nums[++i])

"
Nunca disse o contrário
Claro que não mas ninguém programa assim --i; ++i; só se for a brincar (era só para emendar a mão)
vamosAeles Escreveu:2) "for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){ ""
Repara que no último ciclo ele vai tentar aceder a uma posição(indice) que já não faz parte do array.
Discordo visto que ... pera ái... pois é, o tamanho é 10 e vai de 0 a 9, pronto está entendido... mea culpa.
portanto comparas com o anterior OK.
Só falta o
l de nums
l.lenght é engano ou é mesmo assim ?
de qualquer forma foi bom discutir

-
LuisFilipe
- Membro Diamante

-
- Mensagens: 1270
- Registado: Domingo Set 04, 2005 22:12
por bigslb » Sexta Abr 10, 2009 16:16
LuisFilipe Escreveu:vamosAeles Escreveu:
1) "claro que poderia ser if(nums[--i] > nums[++i]) Rolling Eyes "
Nunca disse o contrário
Claro que não mas ninguém programa assim --i; ++i; só se for a brincar (era só para emendar a mão)
if(nums[--i] > nums[i+1]) normalmente faz-se assim. o fazer ++i ou i++ estamos a afectar a variável, fazer somente i+1 não, só é afectada na próxima iteração do for...
LuisFilipe Escreveu:Só falta o l de numsl.lenght é engano ou é mesmo assim ?
em JAVA nums.length visto k a variavel é nums...
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
-
bigslb
- Membro Diamante

-
- Mensagens: 1426
- Registado: Quinta Ago 18, 2005 17:16
- Localização: Massamá
por vamosAeles » Sexta Abr 10, 2009 18:17
bigslb Escreveu:
em JAVA nums.length visto k a variavel é nums...
Sem a mínima dúvida.
numsl nao era nenhuma variavel q tinha declarado
[[]]
-
vamosAeles
- Membro de Prata

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
Voltar para Programação
Quem está ligado:
Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes