Egy börtönben 1000 cella van, mindegyikben egy rab ül. Kezdetben minden cella zárva van. A börtönőrnek játszani támad kedve: végigmegy az összes cella előtt és mindegyik ajtó zárján fordít egyet. Hasonlo keppen kell megoldani C ben is?
Fordításkor a nyitott cellát bezárja, illetve a zártat kinyitja. Ha végigment, elkezdi elölről, és minden második cella zárján fordít egyet. Aztán minden harmadikon fordít, és így tovább. Legvégül fordít egyet az ezrediken, és kész. Ezután amelyik cella ajtaja nincs bezárva, abból a rab elmehet. Kik a szerencsés rabok?
az en megoldasom mas program nyelvben .
class Solution {
public int[] prisonAfterNDays(int[] cells, int N) {
Set<String> set = new HashSet<>();
int size = 0;
boolean flag = false;
for(int i = 0; i < N; i++){
int[] nextState = new int[8];
for(int j = 1; j < 7; j++){
nextState[j] = (cells[j - 1] == cells[j + 1] ? 1 : 0);
}
String s = Arrays.toString(nextState);
if(!set.contains(s)){
set.add(s);
size++;
}
else{
flag = true;
break;
}
cells = nextState;
}
if(flag){
N = N % size;
for(int i = 0; i < N; i++){
int[] nextState = new int[8];
for(int j = 1; j < 7; j++){
nextState[j] = (cells[j - 1] == cells[j + 1] ? 1 : 0);
}
cells = nextState;
}
}
return cells;
}
}
#1: Igen - lásd:
* [link] - 10.11-es feladat, 26. oldal.
* [link]
nem keverendő ezzel:
* [link]
Kérdező: ezt nem te írtad, hanem "találtad" - mint azt már az előzőekben mondtad (ha te írtad volna, meg tudnád oldani C-ben is).
Mint azt már az előzőekben emlílettük: ne várd a sült galambot a szádba, ne oldasd meg mással a házi feladatodat, mert abból nem tanulsz.
SimkoL kolléga honlapján (szintén pascal nyelven) láthatod, hogy a fentebbi PASPT.DOC programjánál is sokkal egyszerűbben megírható, mindenféle osztályok, halmazok, és a többi, számodra tökéletesen ismeretlen Java-varázslatok nélkül:
C-re fordítva SimkoL programja 24 sor – nem ám erősen töredékesen, mint a „tiéd”, hanem teljes hosszában, gyönyörűen tördelve –, és azokból is egy üres, hat pedig csak egyetlen kapcsos zárójelet tartalmaz. Nem közlöm. Ezt is zsebre tennéd, mint a többit, meggyőznéd magadat, hogy oké, ez is megvan, és semmi hasznát nem látnád a vizsgán. Ha majd úgy találod, hogy átlátod a feladatot, vedd elő az eszedet, próbáld lemodellezni, és állj elő egy valóban saját programmal. Ha nem egészen jön össze, semmi baj, kijavítjuk, de újra hangsúlyozom: Ez a napok óta tartó ámokfutásod ÉR-TEL-MET-LEN.
Pythonban így oldottam meg, nem tudom mi ez a sok kód C-ben :D
cellak = []
for i in range(1001) :
cellak.append(0)
for i in range(1,1001) :
for j in range(1,1001) :
if(j%i == 0) : cellak[j] = not cellak[j]
print("Nyitott cellák: ")
for i in range(1,1001) :
if(cellak[i] == 1) : print(i)
Hasonló a következő feladat a Rosetta Code-n
További 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!