Olimpiadi Italiane a Squadre
La calcolatrice che Giorgio conserva gelosamente da quando faceva le elementari si è rotta, e ora il suo schermo LCD vecchio stile penzola appeso ai tasti dal solo filo di alimentazione.
Nonostante questo, funziona ancora perfettamente come un tempo e quindi Giorgio non ha intenzione di smettere di utilizzarla.
Con la sua affezionata calcolatrice, Giorgio ha appena fatto dei lunghi e complessi calcoli i cui risultati potrebbero portare alla soluzione di numerose congetture in innumerevoli campi della matematica, e ne ha trascritto i risultati su un foglio.
Tuttavia solo dopo si è accorto che, per via del danno descritto sopra, non è in grado di capire l’orientamento giusto dello schermo e quindi in alcuni casi potrebbe aver trascritto il risultato sbagliato (e cioè come si leggerebbe ruotando lo schermo della calcolatrice di 180°).
Da un’approssimazione a stima che si è fatto, gli sembra che i risultati dovrebbero essere numeri abbastanza piccoli.
Pertanto, dato un numero N, vuole scrivere un programma che calcoli il corrispondente numero M ruotato di 180°, e se questo è effettivamente un numero sensato scelga il minore tra i due.Dati di input
Il file input.txt è composto da un’unica riga contenente l’unico intero N.
Dati di output
Il file output.txt è composto da un’unica riga contenente un unico intero, la risposta a questo problema.
Esempi di input/output
input.txt output.txt 14 14 12650 12650 806129 621908 Nel primo caso di esempio, il numero 14 ruotato non genera un numero sensato, per via della presenza della cifra 4.
Nel secondo caso di esempio, il numero 12650 ruotato genera il numero 05921 che non è da considerarsi sensato, per via della presenza della cifra 0 come prima cifra.
Nel terzo caso di esempio, il numero 806129 ruotato genera il numero 621908 che è sensato e minore del precedente.
#include#include #include // min() using namespace std; long calcolatrice(long N) { int cifre[20]; long NN=0; long q, r; int pos=0; while(N != 0) { q=N/10; r=N%10; N=q; if(r==6) cifre[pos++]=9; else if(r==9) cifre[pos++]=6; else if(r==0 || r==1 || r==2 || r==5 || r==8) cifre[pos++]=r; else if(r==3 || r==4 || r==7) return 0; } if(cifre[0] == 0) return 0; for(int i=0; i < pos; i++) NN=10*NN+cifre[i]; return NN; } int main() { ifstream fin ( "input.txt"); ofstream fout("output.txt"); int N1, N2; fin >> N1; N2=calcolatrice(N1); if(N2 == 0) fout << N1; else fout << min(N1,N2); return 0; }