Correttore online – Facili
Sul tavolo ci sono due scatole vuote: la prima ha dimensioni A1×B1×C1 e la seconda A2×B2×C2, espresse come base×altezza×profondità in una qualche unità di misura.
Si vuole determinare se una delle due scatole può essere contenuta nell’altra, sapendo che le due scatole possono ruotare (di 90° alla volta) attorno a ciascuno dei propri lati, per cui le facce delle due scatole sono sempre parallele oppure ortogonali.
Tali scatole hanno spessore nullo e, quindi, una può essere contenuta nell’altra anche a parità di lunghezza di alcuni dei lati (mentre nella realtà ciò non è possibile).
Per esempio, la scatola di dimensioni 3×9×7 è contenuta nella scatola 7×5×10 facendo combaciare i due lati lunghi 7 e allineando il lato lungo 3 con quello lungo 5 (e quindi quello lungo 9 con quello lungo 10).
Non è invece contenuta nella scatola 5×5×10 perché il lato lungo 9 deve necessariamente essere allineato con quello lungo 10 e, quindi, il lato lungo 7 non può essere allineato con uno dei due lati rimanenti, ciascuno di lunghezza pari a 5.Scrivere un programma che riceve le dimensioni A1×B1×C1 e A2×B2×C2 e determina se una delle due scatole può essere contenuta nell’altra.
Dati di input
Il file input.txt è composto da due righe.
- La prima riga contiene i tre numeri interi A1, B1 e C1 separati da uno spazio.
- La seconda riga contiene i tre numeri interi A2, B2 e C2 separati da uno spazio.
Tutti i numeri sono positivi e non superiori a 1000.
Dati di output
Il file output.txt è formato da una sola riga determinata come segue:
- se le due scatole sono uguali, il file deve contenere la scritta Scatole uguali;
- se la prima scatola può essere contenuta nella seconda, il file deve contenere la scritta Prima scatola piu’ piccola della seconda;
- se la seconda scatola può essere contenuta nella prima, il file deve contenere la scritta Prima scatola piu’ grande della seconda;
- in tutti gli altri casi, il file deve contenere la scritta Scatole non confrontabili.
Esempi di input/output
input.txt output.txt 1 2 3
3 2 1Scatole uguali 2 2 3
3 2 1Prima scatola più grande della seconda 2 2 3
3 2 3Prima scatola più piccola della seconda 3 4 5
2 4 6Scatole non confrontabili Autore/i: A.S. Stankevich, ACM ICPC Team St. Petersburg State University of Information technology, Mechanics and Optics.
/* www.valcon.it OII - Esercizi facili - Due scatole */ #include#define UGUALI 0 #define PRIMA_G 1 #define PRIMA_P 2 #define NONCONFR 3 void ordina(int *a, int *b) { if(*a > *b) { int temp=*a; *a=*b; *b=temp; } } int main() { int PRIMA[3], SECONDA[3]; int stato, i; FILE* fin =fopen( "input.txt","r"); FILE* fout=fopen("output.txt","w"); fscanf(fin, "%d %d %d %d %d %d", &PRIMA[0],&PRIMA[1],&PRIMA[2],&SECONDA[0],&SECONDA[1],&SECONDA[2]); ordina( &PRIMA[0], &PRIMA[1]); ordina( &PRIMA[1], &PRIMA[2]); ordina( &PRIMA[0], &PRIMA[1]); ordina(&SECONDA[0], &SECONDA[1]); ordina(&SECONDA[1], &SECONDA[2]); ordina(&SECONDA[0], &SECONDA[1]); stato=UGUALI; for(i=0; i < 3; i++) { switch(stato) { case UGUALI : if(PRIMA[i] > SECONDA[i]) stato= PRIMA_G; else if(PRIMA[i] < SECONDA[i]) stato= PRIMA_P; break; case PRIMA_G : if(PRIMA[i] < SECONDA[i]) stato=NONCONFR; break; case PRIMA_P : if(PRIMA[i] > SECONDA[i]) stato=NONCONFR; break; case NONCONFR: break; } } if(stato == UGUALI ) fprintf(fout, "Scatole uguali" ); else if(stato == PRIMA_G ) fprintf(fout, "Prima scatola più grande della seconda" ); else if(stato == PRIMA_P ) fprintf(fout, "Prima scatola più piccola della seconda"); else if(stato == NONCONFR) fprintf(fout, "Scatole non confrontabili" ); return 0; }