Calcolatrice d’epoca

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;
}

Lascia un commento