Hogy kell ilyen programot írni C nyelven?
A feladat az, hogy 1-től 15-ig kiírja az összes létező 4 jegyű számkombinációt, de egy szám csak egyszer szerepelhet.
A segítséget megköszönném. Privátban is írhattok.
Pl ez is egy jó kombináció: 4, 5 ,10 ,12, 14, de az
1, 2, 3, 4 is jó lehet.
(Azt tudom, hogy 1365 féle kombináció van, mert a feladat másik része hogy ezt is számoljuk ki, de ehhez nem kellett nagy tudomány.)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
include <stdio.h>
include <stdlib.h>
int main();
{
int i=1,j=1,k=1,l=1;
for (i=1;i<=15;i++)
{
while (j!=15)
{
if (j==i)
j++;
k=1;
while (k!=15)
{
if (k==i | k==j)
k++;
l=1;
while (l!=15)
{
if (l==k | l==j | l==i)
l++;
printf ("%i,%i,%i,%i",i,j,k,l);
l++;
}
k++;
l=1;
}
j++;
k=1;
}
}
return 0;
system ("PAUSE");
}
Hát éjjel egykor csak ennyire futotta. Kicsit nyomi lett (főleg a bekezdések) és még futtatni sem futtattam, mert a gépemen most nincs kompiláló program így a gyk szövegszerkesztőjébe írtam meg ahol még a TAB sem működik. Szóval ezen még bőven lesz amit javítgassál, de az elv remélem jó.
Na elég is a magyarázkodásból, elmondom a logikát amit követtem.
Vegyük példának az 1,2,3,4 számsort. Mondjuk ebből kell három számjegyű számokat alkotni.
Vettem első számjegynek az 1-t, másodiknak a 2-t, harmadiknak a 3-at. Így meglett az első számom a 123. Következő lépésben a harmadik számjegyet megnöveltem egyel. Így kaptam a 124-et. A harmadik szám változtatásával nem tudok több kombinációt létrehozni, ezért a második számjegyet emelem meg egyel és újra váltogatom a harmadik számjegyet. Ha a második számjegyet is kimerítettem, akkor az első számjegyet változtatom meg és újra eljátszom az egészet.
A program elméletileg a fent leírtakat valósítja meg, csak nem 4 hanem 15 számmal és 4 számjeggyel. Az i,j,k,l a négy számjegyet tartalmazza. Az első for ciklusban növelem az első számjegyet. Kezdetben ez egyel egyenlő. Az első while ciklusban növelem a j-t. Ha ez megegyezik az i-vel akkor megnövelem 1-el. A k-t egyre állítom és a harmadik while ciklusban a k-t növelem. Ugyancsak összehasonlítom az előző változókkal és az l-t 1-re rakom. A negyedik while ciklus, mint ahogy sejted az l értékét növeli és összehasonlítja az előző számjegyekkel. Ha ez mind megvan akkor elméletileg az első számom meg is van, amit ki is iratok a printf-el. Az utolsó while ciklus ismétlődik mind addig amíg az l egyenlő lesz 15-el (lehet, hogy jobb lenne ha feltételnek azt adnád, hogy l<=15...persze a többi while-nál is). Ha ez a ciklus befejeződik, a harmadik számjegyet megnövelem, l-t 1-re állítom és az egész cirkusz kezdődik elölről.
Remélem tudtam segíteni. Még egyszer jelzem, hogy ez még letesztelve sem volt, csak fejben volt kompilálva ezért ne keseredj el ha n+n hibát fog jelezni. Amúgy írj ha nem tudod megoldani az egyes hibákat.
Amúgy csak egy hibát jelez:
Description Resource Path Location Type
expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token lotto.c /lotto line 1 C/C++ Problem
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
A pontosvessző hibák azok gyakoriak nálam, szóval nem mondtál ujjat. Az # nem tudom hogyan felejthettem ki.
Amúgy jó eredményt ír ki? Attól, hogy nincs hiba még nem biztos, hogy azt írja ki amit szeretnél. Írhatsz privátot is ha akarsz...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
És vigyázz mert nem 1365 kombináció van, mivel ha ezt ki akarod számolni akkor ismétlés nélküli variációt kell használj, mert a kombináció pl az 1,2,3,4-es számokból csak az egyik variánst számolja, viszont ebből még lehet 4!, azaz 24 számot alkotni.
A variánssal kapott számok száma 32760.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!