Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Karina Bueno

Criacao de vetor com valores alternados

Recommended Posts

Oi, estou precisando criar um vetor com valores já ordenados em ordem crescente. (ate aqui tudo simples, beleza)

O pepino éh: que o primeiro número seja 1 e, alternativamente, some 2 para obter o número seguinte e depois 1 para o próximo número até atingir o valor 150. O números a seres pesquisados devem ser gerados de forma aleatória da faixa de 1 até 150. Ex: 1, 3, 4, 6, 7, 9, 10, . . . , 145, 147, 148, 150.

Preciso desse vetor para continuar uma pesquisa binaria,.,

se alguem puder ajudar, agradeço

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é nada exotérico...Se o primeiro é 1, o segundo é 3 e o terceiro é 4, você tem que para obter os números nas posições ímpares você soma 2 e nas pares, 1.

 

Outro modo de calcular lembra fibonacci:

 

Os valores iniciais são 1 e 3. Somando 1 e 3 = 4: 1,3,4

 

Somando 3 e 4 = 7, mas como a maior diferença entre dois números é 2, subtraimos 1 e colocamos o resultado entre 4 e 7: 1,3,4,6,7

 

4+6 = 10, 10-7>2 => 1,3,4,6,7,9,10

6+7 = 13 , 13-10 > 2=> 1,3,4,6,7,9,10,12,13

7+9 = 16, 16-13 > 2 => 1,3,4,6,7,9,10,12,13,15,16

9+10= 19, 19-16 > 2 => 1,3,4,6,7,9,10,12,13,15,16,18,19

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é nada exotérico...Se o primeiro é 1, o segundo é 3 e o terceiro é 4, você tem que para obter os números nas posições ímpares você soma 2 e nas pares, 1.

 

Outro modo de calcular lembra fibonacci:

 

Os valores iniciais são 1 e 3. Somando 1 e 3 = 4: 1,3,4

 

Somando 3 e 4 = 7, mas como a maior diferença entre dois números é 2, subtraimos 1 e colocamos o resultado entre 4 e 7: 1,3,4,6,7

 

4+6 = 10, 10-7>2 => 1,3,4,6,7,9,10

6+7 = 13 , 13-10 > 2=> 1,3,4,6,7,9,10,12,13

7+9 = 16, 16-13 > 2 => 1,3,4,6,7,9,10,12,13,15,16

9+10= 19, 19-16 > 2 => 1,3,4,6,7,9,10,12,13,15,16,18,19

 

 

Isis eu dei uma estudada no seu exemplo e pensando saiu o seguinte codigo em portugol

 

 

.....

para i de 1 ate 150n faca
vet [i] <- i;
i<- i+2;
vet[i]<-i
fim para

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você vai obrigatoriamente seguir esse padrão...

 

note que:

vetor := []
colocar 1 no vetor
a := 3
b := 4

while (b < 150):
	 colocar a e b no vetor
	 a = a + 3
	 b = b + 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <math.h>

 

// progressao

int fun(int n) {

return 1/4.0*(6*n+ pow(-1, n)-1);

}

 

int main(void) {

int i;

for (i=1; i<=100; i++)

printf("%d ", fun(i));

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente, de modo mais direto,dá pra calcular assim:

 

#include <stdio.h>
int main() {
  int i;
  for(i=1;i<=50;i++)
	printf("%d ", i+i/2);
}

 

 

Quem não tem tripas matemáticas não precisa ler o que vem a seguir:

 

Definição da função:

F1 = 1

Fn = Fn-1 + 1 , para n ímpar > 1

Fn = Fn-1 + 2 , para n par

 

Escrevendo a série e o somatório de cada elemento, cheguei num padrão e à formula Fn= n + floor(n/2).

Note que quando você opera com inteiros positivos, a função piso "trunca" o 0,5 p/ 0. E com inteiros negativos, a função teto tem o mesmo comportamento (floor(-0,5) = -1).

 

 

Supondo que isso é válido para todo inteiro n <= m, temos:

 

Fm = m + floor(m/2)

 

Somando 2 em ambos os lados: Fm +2= m + floor(m/2) + 2

Fm+2 corresponde ao elemento Fm+1, sendo m+1 par. Então:

 

Fm+1 = m + floor(m/2) + 2

Fm+1 = (m+1) + floor(m/2) + 1

Fm+1 = (m+1) + floor((m-1+1)/2) + 1

Fm+1 = (m+1) + floor((m-1)/2) + 1

Fm+1 = (m+1) + (m-1)/2 + 1

Fm+1 = (m+1) + (m-1+2)/2

Fm+1 = (m+1) + (m+1)/2

Fm+1 = (m+1) + floor((m+1)/2) ***

 

 

Somando 1 em ambos os lados: Fm +1= m + floor(m/2) + 1

Fm+1 corresponde ao elemento Fm+1, sendo m+1 ímpar. Então:

 

Fm+1 = m + loor(m/2) + 1

Fm+1 = (m+1) + floor(m/2)

Fm+1 = (m+1) + floor((m+1-1)/2)

Fm+1 = (m+1) + floor((m+1)/2)-floor(1/2)

Fm+1 = (m+1) + floor((m+1)/2)***

 

 

Se alguém viu algum erro na tentativa da demonstração, poste.

 

=> -floor(1/2) = ceil(-1/2) = 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.