Java - Sequência Array

5 respostas
javaarray
B

Boa noite,
Alguém poderia me ajudar com o seguinte exercício?

Given n>=0, create an array with the pattern {1, 1, 2, 1, 2, 3, … 1, 2, 3 … n} (spaces added to show the grouping). Note that the length of the array will be 1 + 2 + 3 … + n, which is known to sum to exactly n*(n + 1)/2.

seriesUp(3) → [1, 1, 2, 1, 2, 3]
seriesUp(4) → [1, 1, 2, 1, 2, 3, 1, 2, 3, 4]
seriesUp(2) → [1, 1, 2]

Obrigado.

5 Respostas

F
int n = 6; // exemplo com n valendo 6
int total = (n * ((n + 1) / 2));
int[] ns = new int[total];

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        ns[i - 1] = j;
    }
}
B

Estou lendo o código aqui, mas o que não entendo é como que o vetor será populado na sua posição [0] pois todas as variáveis começam com 1.

Pode me ajudar?

F

Realmente, coloca “i - 1” na hora de definir a posição do array.

Com certeza existem outras formas, esta foi a que pensei primeiro. ^^

B

Entendi, mas continua dando certo para alguns casos apenas.
Olha da maneira como fiz:

int x=0;
int myArray[] = new int[n*(n+1)/2];

for(int i=1; i<n; i++){

for(int j=1; j<=i; j++){  
  myArray[x] = j;
}
x++;

}
return myArray;

Porém dá a mesma coisa, ele dá correto para alguns casos, mas errado para outros.

pmlm

O teu x++ tem de estar dentro do segundo ciclo também senão vais sobreescrever a posição várias vezes. E tens de percorrer o primeiro ciclo até n inclusive.

int x=0;
int myArray[] = new int[n*(n+1)/2];

for(int i=1; i<=n; i++){  // Menor ou igual 
   for(int j=1; j<=i; j++){  
      myArray[x] = j;
      x++;     // tem de ficar dentro deste ciclo. Podes eliminar esta linha e ter simplesmente myArray[x++] = j; acima
   } 
}
return myArray;
Criado 30 de dezembro de 2016
Ultima resposta 30 de dez. de 2016
Respostas 5
Participantes 3