Hogy kéne ezt a ciklust megírni?
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.
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.
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)
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
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.
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
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;
}
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!