A "börtönőrös" feladat hogy szól?
Van egy olyan feladat, hogy egy börtönőr körbe jár a börtönben, és amikor elmegy egy cella mellett, elfordítja a kulcsát a cella zárdában, amitől az ha ki van nyitva, bezáródik, ha zárcavcan, kinyílik. Mindig, amikor körbeér, a következő körben már csak minden második cellánál áll meg, aztán már csak minden harmadiknál, minden negyediknél (...). A kérdés, hogy végül hányás cella marad nyitva.
...Tudtommal így van a feladat, de nem vagyok benne biztos.
A tömböknél volt róla szó.
A kérdésem, hogy eredetileg hogy szól a feladat?
Ez az én megoldásom:
int i, j;
char c[101];
for (i = 0; i < 101; i++) c[i] = 'z';
for (j = 1; j < 101; j++) {
for (i = 1;i < 101; i++) {
if (i % j == 0) {
// printf("%d\t%d\t%c\n", j, i, c[i]);
if (c[i] == 'n') c[i] = 'z';
else c[i] = 'n';
}
}
}
for (i = 0; i < 10; i++)
for (j = 0; j < 10; j++) printf("\t%c%s", c[i*j], j == 9 ? "\n\n" : "");
A négyzetszám számú cellák nyitva lesznek, ha így helyes
Ahogy látom, helyes. Az eredmény áttekinthetőbb lenne, ha a végére még odacsempésznéd ezt a sort:
for (i = 0; i < 101; i++) if (c[i] == 'n') printf("%d ", i);
Itt az én változatom, pontosabban: Gyakorlatilag változtatás nélkül átvettem SimkoL pascal-programját, az 1-től indexelt tömbbel együtt -- tehát cella[0] felhasználatlanul árválkodik, de ez egyszer talán megbocsátható az a haszontalan bájt:
#include <stdio.h>
const int cellaszam = 101;
const char szabad = 0;
int main(){
char cella[cellaszam];
int i, n;
for (i = 1; i < cellaszam; i++) cella[i] = szabad;
for (i = 2; i < cellaszam; i++){
n = i;
while (n < cellaszam){
cella[n] = !cella[n];
n += i;
}
}
for (i = 1; i < cellaszam; i++) if (cella[i] == szabad) printf("%d ", i);
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!