Cleopatra sta giocando con una fila formata da $n^2$ soldatini (Dove $n$ deve essere un numero intero maggiore di 30). Per prima cosa, Cleopatra toglie dalla fila tutti i soldatini la cui posizione corrisponde a un quadrato (ossia il 1° soldatino, il 4°, il 9° e così via). Completata questa procedura, Cleopatra forma una nuova fila con i soldatini rimasti e la ripete togliendo ancora tutti i soldatini la cui posizione della nuova fila corrisponde a un quadrato. La cosa va avanti in questo modo, sempre con la stessa procedura. Quanti soldatini potrebbero essere rimasti quando Cleopatra, dopo aver completato varie volte la suddetta procedura, si stanca e smette di giocare?
ho tentato di risolverlo nel seguente modo, ma non sono sicuro che sia giusto... insomma la risposta al quesito è 132, e tale valore uscirebbe per N=33... ad ogni modo vorrei sapere se secondo voi è giusto e se si può migliorare...GRAZIE!
- Codice:
int n, i, qpcont=0, cast, powN=0, esp, fila; //qpcont è il contatore per quadrati perfetti
float sq;
cout<<"inserire un numero n maggiore di 30 :\n";
cin>>n;
i=0;
for(esp=0; esp<n; esp++)
{
powN=n*n;
}
while(i<powN)
{
i++;
sq=sqrt(i);
cast=(int)sq;
if(sq-cast==0){
qpcont++;
}
fila=(powN-qpcont);
powN=fila;
}
cout<<"il numero finale di soldatini e' :"<<fila<<endl;