👤

Într-o închisoare cu n celule se află, la un moment dat, n deţinuţi. Se ia hotărârea să fie eliberaţi anumiţi deţinuţi, alegerea lor făcându-se într-un mod special. În închisoarea aceea erau tot n gardieni. Procedeul de determinare a deţinuţilor ce vor fi eliberaţi este următorul: gardianul k pleacă de la celula k şi mergând din k în k celule, schimbă starea uşilor pe la care trece,1<=k<=n. În final anumite celule vor rămâne deschise, deţinuţii respectivi fiind eliberaţi. Puteţi afla care? Iniţial toate uşile sunt închise. Exemplu: n=50 vor fi eliberati cei din celulele 1 4 9 16 25 36 49.

Răspuns :

#include <iostream>
#include <math.h>
using namespace std;

int main(){
    int n, i, max;
    cin>>n;
    int v[n];

    max = floor((float)sqrt(n));

    for(i=1;i<=max;i++) v[i] = i*i;
    for(i=1;i<=max;i++) cout<<v[i]<<" ";
}
Varianta mult mai rapidă:

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    for(int i=1; i*i<=n; i++) cout << i * i << ' ';
    return 0;
}