Kezdőoldal » Számítástechnika » Programozás » Valaki meg tudná nézni, hogy...

Valaki meg tudná nézni, hogy mi lehet itt a baj?

Figyelt kérdés

Írtam egy programot, ami elvileg amikor lefuttatom, akkor működik is, de amikor beküldöm ellenőrzésre, akkor a rendszer mindig visszadobja azzal, hogy hibás. Megnéznétek, hogy mi lehet a probléma?


A feladat:

Tekintsük a következő sorozatképzési szabályt:


Ha ai páros, akkor ai+1 = ai / 2 , egyébként ai+1 = 3ai + 1.


Az a0 = 3 kezdőértékről indulva a fenti szabály az alábbi sorozatot generálja:


3 10 5 16 8 4 2 1 4 2 1 4 2 1 4 2 1 ...

A Collatz-sejtés (1937) szerint a fenti szabályt tetszőleges pozitív a0 kezdőértékre alkalmazva, előbb-utóbb eljutunk a 4 2 1 számhármas végtelen ismétlődéséhez. Ezt a sejtést még senki nem bizonyította, sőt igen nehéz matematikai problémaként tartják számon.


Írj C-programot, mely beolvassa a0 értékét, majd kiírja, hogy melyik az a legkisebb i index, melyre ai = 1. A fenti példára a helyes válasz 7.


A programom:

#include <stdio.h>


int main(void) {


int z;

int x;


printf("", z);

scanf("%d", &z);


if(z==1) {


printf("0");

return 0;


}


do {


if(z%2==0) {


(++x);

z=z/2;


}


else(z=3*z+1, ++x);


}


while(z>1);


if(z==1) {


printf("%d", x);


}


return 0;


}



2021. szept. 26. 15:41
1 2
 1/12 Pelenkásfiú ***** válasza:
100%

else(z=3*z+1, ++x);


Ez mi? Ilyet lehet?

Else után nem egy {} blokkba kellene tenni az utasításokat?

2021. szept. 26. 15:53
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:
Nem tudom, lehet azt veszi akkor hibának. De ezek szerint más hiba nincs benne? Csak mert ugye, ha beírok neki bármilyen számot, akkor kiadja rá a jó eredményt.
2021. szept. 26. 15:59
 3/12 Pelenkásfiú ***** válasza:
100%

Próbáld ki!

Amúgy értem, hogy miért működhet.. állhat az else után egyetlen utasítás {} blokk nélkül és mivel zárójelben van, gondolom annak veszi, de egy másik compiler simán hibának jelezheti.

2021. szept. 26. 16:03
Hasznos számodra ez a válasz?
 4/12 A kérdező kommentje:
Beküldtem így is, de ugyanúgy visszadobta. Hibaként meg olyat ír ki, hogy nekem az outputon a helyes eredmény helyett mindenhol csak egy hosszú számsor van. Pedig ha a saját gépemen futtatom a programot, akkor kiadja a megfelelő eredményt.
2021. szept. 26. 16:07
 5/12 Pelenkásfiú ***** válasza:
100%

És ez mi az elején?

printf("", z);

2021. szept. 26. 16:13
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:
Lehet, hogy butaságot csináltam azzal, de én így hagytam helyet a felhasználónak, hogy oda írjon be egy számot.
2021. szept. 26. 16:16
 7/12 Pelenkásfiú ***** válasza:
100%
Nem kell. Töröld ki!
2021. szept. 26. 16:18
Hasznos számodra ez a válasz?
 8/12 A kérdező kommentje:

Ugyanúgy nem fogadja el, de nem értem miért.

Ilyeneket írogat:

Input:

2

Your output:

32765

Correct output:

1


De nekem nem az van az outputon, ha beírom, hogy kettő. Kiírja szépen nekem is, hogy az 1. Szóval én egyszerűen nem értem.

2021. szept. 26. 16:26
 9/12 Pelenkásfiú ***** válasza:
100%
Most már gépnél vagyok. Nézem...
2021. szept. 26. 16:28
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
100%

Kicsit átírva:

[link]

1. Ciklusváltozónak használd inkább az i (,j,k,l,...) jelöléseket - az az elterjedt, illetve ha már a példában a-val jelölődik a sorozat, legyen az.

2. Az else ág és a ciklusváltozó növelése teljesen katyvasz.

3. A ciklusváltozónak nem volt kezdőértéke, így memóriaszemét került bele.

2021. szept. 26. 16:30
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!