Kezdőoldal » Számítástechnika » Programozás » Hogy kéne ezt a ciklust megírni?

Hogy kéne ezt a ciklust megírni?

Figyelt kérdés

using namespace std;


int main()

{

int ajtok[100], i, ORS, A;

for(i=0;i<100;i++)

ajtok[i]=1;

for(ORS=0;ORS<100;ORS++)

for(ORS=A;A<100;A++)

ajtok[A]=ajtok[A]*-1;

for(i=0;i<100;i++)

if(ajtok[i]==1)

cout<<ajtok[i]<<"\t";

return 0;

}


A program lefut de nem jó, bár azt hiszem tudom hol a gond.A feladat: Van 100 ajtó az összes nyitott állapotban. Jön az első őr és az összes 1. ajtón fordít egyet(bezárul), jön a második őr és az összes 2. ajtón fordít egyet(ellenkezőjére változik), így tovább a 100. őrig. A program kiírja hogy azoknak az ajtóknak a számát amely nyitva lesz.


Az algortimus levan írva a füzetbe viszont a ciklus ezen részét(for(ORS=A;A<100;A++) fogalmam sincs hogy kéne leírni helyesen


Úgy írtuk le hogy:

Ciklus A=ORStől 99ig ORS+1-esével.


Próbáltam már többféle képpen, de sehogy se jó a neten meg nem nagyon találtam hozzá segítséget, ezzel a megoldással.


2013. nov. 7. 19:15
1 2
 1/11 A kérdező kommentje:

using namespace std;


int main()

{

int ajtok[100], i, ORS, A;

for(i=0;i<100;i++)

ajtok[i]=1;

for(ORS=0;ORS<100;ORS++){

for(A=ORS;A<100;A++){

ajtok[A]=ajtok[A]*-1;}}

for(i=0;i<100;i++)

if(ajtok[i]==1)

cout<<i<<"\t";

return 0;

}


Rájöttem hogy rosszat írok ki, de nem vagyok benne biztos hogy ez így jó. Nem úgy van hogy minden prímedik ajtó lesz nyitva? Így viszont jóval több számot dob ki.

2013. nov. 7. 19:37
 2/11 A kérdező kommentje:
Egész pontosan 1-től növekszik mindig 2vel.
2013. nov. 7. 19:44
 3/11 anonim ***** válasza:

gondolkozz már..

egy ajtóban annyiszor fordítjuk meg a kulcsot, ahány osztója van

az ajtók nyitva kezdenek

tehát páros kulcsfordításra lesznek nyitva

milyen számoknak van páros számú osztója? (úgy is kérdezhetném, hogy milyen számoknak van páratlan számú osztója)

2013. nov. 7. 19:46
Hasznos számodra ez a válasz?
 4/11 A kérdező kommentje:
A párosaknak van páros számú osztója.
2013. nov. 7. 19:51
 5/11 A kérdező kommentje:
Vagy nem ? :D Mert ha igen, akkor nem jó :D
2013. nov. 7. 19:56
 6/11 anonim ***** válasza:

a program több szempontból se jó, a feladatot meg végképp nem oldja meg, és még a füzetbe is rosszat írtatok, de mindegy


int main() {

bool ajtok[101] = {}; //false = nyitva

for(int i=1; i<=100; ++i) for(int j=i; j<=100; j+=i) ajtok[j]=!ajtok[j];

for(int i=1; i<=100; ++i) if(!ajtok[i]) std::cout<<i<<' ';

return 0;

}


ez megoldja a problémát, kiírja neked a nyitva lévő ajtókat

ebben semmi érdekes nincs egyébként, tehát ha a kiíratás feltételében kitörlöd a ! negálást, akkor sokkal érdekesebb számokat fog kiírni (amik zárva vannak)


a 101-es tömb kicsit amatőr, de így legalább szemléletesek a ciklusok

2013. nov. 7. 20:06
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:

Ezt a megoldást én is megtaláltam, értem is és látom hogy sokkal egyszerűbb de így kell megoldani.


Mármint ez a tényleges leszimulálás


Az összes ajtó értéke 1 a ciklus elején.


1:nyitva

-1:zárva


Az első for ciklus adná meg az örők sorszámát

A második for ciklus adná meg hogy hanyadik ajtón fordítson(Azt megszorozzuk -1el és így az érték az "ellentétére" változik


A végén megvizsgálja mely ajtó értéke 1(nyitott) és azok sorszámát kiírja. Ezen az elven működik.

2013. nov. 7. 20:12
 8/11 anonim ***** válasza:

egyrészt én nem megtaláltam, mert most írtam meg Neked

másrészt most pontosan elmondtad, hogy mit csinál a kódom


csak itt nem 1 meg -1 van hanem 1 meg 0


szóval nem elég, hogy pontosan leszimulálja, tetejébe még jól is, úgyhogy nem értem, mi a gond, írd át 0 helyett -1re, ha úgy jobban tetszik


és még mindig nem gondolkoztál azon, hogy milyen számoknak van páratlan számú osztója

2013. nov. 7. 20:16
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:

Minden páros és minden prím! :D


Jó most már látom, az a "gondom" a tieddel hogy bool-t használtál. De át írtam az enyémre.


using namespace std;


int main()

{

int ajtok[101], i, ORS, A;

for(i=1;i<=100;i++)

ajtok[i]=1;

for(ORS=1;ORS<=100;ORS++){

for(A=ORS;A<=100;A+=ORS){

ajtok[A]=ajtok[A]*-1;}}

for(i=1;i<=100;i++)

if(ajtok[i]==1)

cout<<i<<"\t";

return 0;

}

2013. nov. 7. 20:23
 10/11 A kérdező kommentje:
Nem valami még mindig nem jó :/ Nem hiszem el :D
2013. nov. 7. 20:25
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!