Ordinamento quadrato o cubico di oggetti nello spazio.
salve a tutti,
Ho un problema con l'ordinamento in righe e colonne di oggetti contenenti il resto.
Mi spiego meglio, se io avessi 10 scatole da accatastare al cubo, otterrei $ 2^3 + 2 $ scatole, dove le prime 8 sono perfettamente accatastate al cubo, le altre 2 sono difronte.
fare questo senza resto, eliminando gli elementi in eccesso è molto semplice:
int scatole = 8;
Scatola scatola[] = new Scatola[scatole];
int p = scatole ^ (1.0/3);
int index = 0;
for (int x=1; x {
scatola[index] = new scatola( x*10, y*10, z*10);
index++;
}
il risultato è che così ho una radice intera, $ 8^(1.0/3) = 2 $.
Ma se partissi da 10, 11 o più elementi che non generano radici perfette? come stabilire il resto e posizionare anch'esso nello spazio?
Ho un problema con l'ordinamento in righe e colonne di oggetti contenenti il resto.
Mi spiego meglio, se io avessi 10 scatole da accatastare al cubo, otterrei $ 2^3 + 2 $ scatole, dove le prime 8 sono perfettamente accatastate al cubo, le altre 2 sono difronte.
fare questo senza resto, eliminando gli elementi in eccesso è molto semplice:
int scatole = 8;
Scatola scatola[] = new Scatola[scatole];
int p = scatole ^ (1.0/3);
int index = 0;
for (int x=1; x {
scatola[index] = new scatola( x*10, y*10, z*10);
index++;
}
il risultato è che così ho una radice intera, $ 8^(1.0/3) = 2 $.
Ma se partissi da 10, 11 o più elementi che non generano radici perfette? come stabilire il resto e posizionare anch'esso nello spazio?
Risposte
Potresti cercare di chiarire meglio il tuo problema? Non mi è del tutto chiaro. Ho capito che parti da un certo numero di "casse" che vuoi posizionare nello spazio, ma non mi è chiaro che cosa intendi con "resto". Li vuoi mettere necessariamente a formare un cubo? È ovviamente possibile metterli a formare un cubo solo quando sono cubi perfetti. In tutti gli altri casi devi accontentarti di posizionarli in modo meno regolare. Per alcuni numeri è possibile trovare strutture abbastanza "regolari", per esempio il 12 in cui puoi formare un parallelepipedo di lati 2x2x3, ma in molti casi non è neanche possibile trovare dei parallelepipedi con quel numero di "casse" (considera i numeri primi).
Ricordo all'utente Achilleterzo che per postare un codice si utilizzano i tag code, che può trovare nel modulo di risposta completa oppure usare scrivendo code tra parentesi quadre all'inizio e /code sempre tra parentsi quadre alla fine.
"apatriarca":
Potresti cercare di chiarire meglio il tuo problema? Non mi è del tutto chiaro. Ho capito che parti da un certo numero di "casse" che vuoi posizionare nello spazio, ma non mi è chiaro che cosa intendi con "resto". Li vuoi mettere necessariamente a formare un cubo? È ovviamente possibile metterli a formare un cubo solo quando sono cubi perfetti. In tutti gli altri casi devi accontentarti di posizionarli in modo meno regolare. Per alcuni numeri è possibile trovare strutture abbastanza "regolari", per esempio il 12 in cui puoi formare un parallelepipedo di lati 2x2x3, ma in molti casi non è neanche possibile trovare dei parallelepipedi con quel numero di "casse" (considera i numeri primi).
Intanto grazie per l'interesse, il problema è per quanto semplice, un po complicato.
Il numero di elementi è sempre variabile, la prima cosa che posso fare, è calcolare il primo cubo prossimo al numero, o per eccesso o per difetto.
Prevedendo un area del cubo più grande del numero, posso mettere elementi fino al termine senza riempire completamente l'area, valutando semplicemente la dimensione originale dell'array.
Se invece prevedessi un area più piccola, avrei il resto delle "casse", da un possibile elemento, fino a un altro possibile cubo.
Anche se le 2 soluzioni in se si somigliano, nello spazio viene da se che un cubo più piccolo occupa meno spazio in larghezza/profondità rispetto ad un cubo più grande non riempito, che occuperebbe magari un area di 4x4 in larghezza/profondità, ma un solo elemento sopra. invece di un 2x2x2 + un elemento sopra al cubo, con 9 elementi in totale.
Per fare il controllo dei cubi prossimi ora uso una semplice funzione:
public int getCube(int n, ) { int c = 0; int i = 2; while (n < c) { c = i^3; i++; } }