Immagina di enumerare gli elementi dei rombi che crescono [1],[1,3,1],[1,3,5,3,1],…(solo numeri dispari tali da allinearsi bene). Questo sarebbe simile al seguente, nota che inizi sempre a elencare con 1:
01
1 02 03 04
1 2 3 4 05 06 07 08 09 …
5 10 11 12
13
(1) (1,3,1) (1,3,5,3,1) (1,3,5,7,5,3,1) …
Ora se inizi a sommare le colonne ( [1],[2],[1,3,5],[4],[5],[2,6,10],…) otterrai la sequenza di rombo . Questi sono i primi 100 elementi di detta sequenza:
1,2,9,4,5,18,35,24,9,10,33,60,91,70,45,16,17,54,95,140,189,154,115,72,25,26,81,140,203,270,341,288,231,170,105,36,37,114,195,280,369,462,559,484,405,322,235,144,49,50,153,260,371,486,605,728,855,754,649,540,427,310,189,64,65,198,335,476,621,770,923,1080,1241,1110,975,836,693,546,395,240,81,82,249,420,595,774,957,1144,1335,1530,1729,1564,1395,1222,1045,864,679,490,297,100
IO
Sei libero di scegliere uno di questi tre metodi di input / output (non dovrai gestire input non validi):
- Dato un intero n uscita n -esimo elemento in quella sequenza (0- o 1-indicizzati, scelta)
- Dato un numero intero n output primi n elementi di quella sequenza
- Stampa / restituisce la sequenza indefinitamente
Casi test
Si prega di fare riferimento ai primi 100 termini sopra, qui ci sono alcuni esempi più grandi (1-indicizzato):
101 -> 101
443 -> 1329
1000 -> 49000
1984 -> 164672
2017 -> 34289
2018 -> 30270
3000 -> 153000

Iniziamo leggendo il numero dell'elemento a base singola, n , da stdin e salvando un duplicato.
Quindi determiniamo in quale rombo ci troviamo contando un numero intero, r , fino a quando
L'offset della colonna dal lato destro del rombo, c , è
Per ottenere quell'offset riflesso attorno all'asse centrale, controlliamo se
E se lo è, allora la c riflessa diventa
Una volta che abbiamo il riflesso c , la somma della colonna è semplicemente