Ezt hogy lehet megcsinálni? (Programozás C++-ban)
Az lenne a feladat, hogy megállapítsam, melyik szám fordul elő legtöbbször a 3 kisorsolt hét számai közt, amik egy fájlban vannak.
Addig eljutottam ,hogy beolvassam az adatokat struktúrába és kiírjam, de tovább nem megy.
#include <iostream>
#include <fstream>
using namespace std;
struct lotto{
int het;
int sz1;
int sz2;
int sz3;
int sz4;
int sz5;
};
int main()
{
int i, n;
ifstream f("lotto.dat");
if(f.fail()){
cout<<"Hiba";
return 1;
}
f>>n;
lotto l[n];
for(i=0;i<n;i++){
f>>l[i].het>>l[i].sz1>>l[i].sz2>>l[i].sz3>>l[i].sz4>>l[i].sz5;
}
f.close();
for(i=0;i<n;i++){
cout<<"Het: " <<l[i].het<<"\t" << "| ";
cout<<l[i].sz1 << ", ";
cout<<l[i].sz2 << ", ";
cout<<l[i].sz3 << ", ";
cout<<l[i].sz4 << ", ";
cout<<l[i].sz5 <<endl;
}
cout<<"-------------------------"<<endl;;
//az l (lotto) tömb meg kell nézni hogy melyik számból van a legtöbb
return 0;
}
Algoritmus: felírjuk valahova az összes számot, végigmegyünk az heteken, és minden húzásnál a megfelelő számhoz odateszünk egy strigulát.
A végén megnézzük, melyik szám mellett van a legtöbb strigula, és ez lesz az eredmény.
Használhatod a map adatszerkezetet, az elég intuitív.
sz1 sz2 ... helyett én tömböt használnék, de a feladat szempontjából fontos eltárolni hetes bontásba a számokat.
Én csak egyszerűen beolvasnám a számokat és a beolvasott számokkal indexelnék meg egy erre a célra kialakított tömböt, a tömb elemeit mindig az aktuálisan beolvasott számnak megfelelő tömbelemet növelnék eggyel, pl. ha a beolvasott szám 5 akkor a tömb 5.-ik elemét növelném eggyel. Aztán csak egy egyszerű maximumkeresést kell csinálni értelem szerűen.
Köszönöm a válaszokat, én is hasonlóra gondoltam. Azért nem tömbbel csináltam, mert így számomra átláthatóbbak a számok.
Hogy lehet minden szához hozzátenni egy strigulát?
Map-ot még nem használtam, azt inkább kerülném :)
"Hogy lehet minden szához hozzátenni egy strigulát?"
Olyan érzésem van hogy nem érted amit írtam. Én is elvben azt javasoltam, csak én nem strigulával, csak érteni kell az analógiát.
Ha db tömböt használok akkor db[5] tárolja hogy 5 hányszor szerepelt.
Akkor célszerű int-eket tárolni db-be, de ha mindenképp strigulázni akarod string-eket is lehet "I", "II", "III", stb. stringeket, de felesleges.
Ezek után remélem minden érthető.
A pszeudo kód:
program lottomaxdarab;
int db[91];
db minden elemét 0-ra állítjuk
while (bemenet nemüres){
int i;
bemenet >> i; //bemenetről olvasunk i-be
db[i]++;
}
//maximum keresés
int maximum = 1;
for (i=2;i<91;i++){
if db[i]>db[maximum] then
maximum=i;
}
println maximum, " számból van a legtöbb ",db[maximum],"-szer/ször fordul elő";
endprogram;
Ha nem csak egy számból van legtöbb akkor ezek közül a legkisebbet adja vissza ez az implementáció. Meg lehetne csinálni hogy mindet visszaadja, csak gondolkodni kell hogy hogyan, nem nehéz az sem.
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!