👤

Î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.
cum se face in c ?


Răspuns :

#include <iostream>
#define CELULE 128 // Pot fi 50/100/etc.
using namespace std;
void main()
{
int n,i,k;

cout<<"Numarul total de detinuti/gardieni este ";cin>>n;

cout<<"Gardianul k este ";cin>>k;
bool v[CELULE];
for(i=0;i<CELULE;i++) v[i] = false; // Initial toate celule sunt inchise

i=k;

while(i<CELULE)
{ v[i] = true; // Gardianul deschide celula k
i=k+k; // Merge "din k in k" celule
}
for(i=0;i<CELULE;i++) if(v[i]) cout<<i<<" ";
}

Unde nu intelegi intreaba