Hogyan lehet C#-ban tömb XY elemét kiiratni?
Olyan feladatot kaptam, hogy egy 1000 db lottószelvény számait megkellett számolni, hogy 1-90 számot hányszor húzták és melyiket húzták ki a legtöbbször (maximum téltel) és az nem tudom megoldani, hogy az első 5 leggtöbbet kihúzott számot irassam ki.
Az eddig sikerült program kódja:
Random r = new Random();
int n = 1000;
int[] L = new int[n];
for (int i = 0; i < n; i++)
{
L[i] = r.Next(1, 91);
}
int[] db=new int[91];
for (int i = 0; i < n; i++)
{
db[L[i]]++;
}
int hely = 1;
for (int i = 2; i < 90; i++)
{
if(db[i] > db[hely])
{
hely = i;
}
}
for (int i = 1; i <= 90; i++)
{
Console.WriteLine("{0} - {1}",i,db[i]);
}
Console.WriteLine();
Console.WriteLine("Legtöbbször kihúzott szám: " + hely);
A tömböt sorba tudod rendezni a
Array.Sort(tomb_neve);
paranccsal, utána már csak az utolsó 5 tagját kell kiíratnod.
int len = L.Length;
for (int i=1, i<=5, i++) {
Console.WriteLine(i + ". leggyakoribb szám: "+ L[len-i]);
}
//A kiíratásban nem vagyok biztos, sose volt a kezemben C#.
Fú, most látom hogy teljesen rossz a válaszom, elnézést.
Csinálhatod úgy hogy lemásolod a db és azt rendezed, kiválasztod az 5 legnagyobbat.
Utána kikeresed az indexeiket a db tömbből,
és utána az indexeknek megfelelő értékeket az L tömbből kiírod.
Én két dimenziós tömböt használnék az elsőben a kihúzott számokat tárolnám a tömb második dimenziójában pedig azt az értéket ahányszor az első dimenzióban tárolt kihúzott szám ki lett húzva.
int[,] L = new int[1000,1];
Feltöltöd az első dimenzióját véletlenszerű értékekkel és közben egy darab nevű változót arra használsz hogy tárold benne azt az értéket amit majd beállítasz a második dimenzióba.
int count = 0;
for(int i = 0; i < L.GetLength(0); ++i) {
....L[i,0] = r.Next(1, 91);
....,,,,for(j = 0; j < i; ++j) {
....,,,,....if(L[i,0] == L[j,0])
....,,,,....,,,,L[i,1] = L[i,1] + 1;
....,,,,}
}
Lehet rossz az egész ritkán alkalmazom a kódolást gyakorlatban a lustaságom miatt.
// Így jobb volna talán teljesítmény szempontjából:
int kisorsoltSzámokDarabja = 0;
for(int i = 0; i < L.GetLength(0); ++i) {
....L[i,0] = r.Next(1, 91);
....++kisorsoltSzámokDarabja;
....for(j = 0; j < kisorsoltSzámokDarabja; ++j) {
....,,,,if(L[i,0] == L[j,0])
....,,,,....L[i,1] = L[i,1] + 1;
....}
}
Megoldható 'egydimenenziós tömbökkel is, de tényleg nagyobb kínlódás. Csak érdekességképpen írtam:
static void Main(string[] args)
{
Random r = new Random();
int n = 1000;
int[] L = new int[n];
int[] db = new int[91];
int[] elsok = {1, 1, 1, 1, 1};
for (int i = 0; i < n; i++) L[i] = r.Next(1, 91);
for (int i = 0; i < n; i++) db[L[i]]++;
for (int i = 1; i < 91; i++)
{
Console.Write("{0,3}", db[i]);
if (i % 10 == 0) Console.WriteLine();
}
for (int i = 1; i < 90; i++)
if (db[i] > db[elsok[0]]) elsok[0] = i;
for (int i = 1; i < 90; i++)
if ((db[i] > db[elsok[1]]) && (i != elsok[0])) elsok[1] = i;
for (int i = 1; i < 90; i++)
if ((db[i] > db[elsok[2]]) && (i != elsok[0]) && (i != elsok[1])) elsok[2] = i;
for (int i = 1; i < 90; i++)
if ((db[i] > db[elsok[3]]) && (i != elsok[0]) && (i != elsok[1]) && (i != elsok[2])) elsok[3] = i;
for (int i = 1; i < 90; i++)
if ((db[i] > db[elsok[4]]) && (i != elsok[0]) && (i != elsok[1]) && (i != elsok[2]) && (i != elsok[3])) elsok[4] = i;
Console.WriteLine("\n{0,3} - húzások: {1,3}", elsok[0], db[elsok[0]]);
Console.WriteLine("{0,3} - húzások: {1,3}", elsok[1], db[elsok[1]]);
Console.WriteLine("{0,3} - húzások: {1,3}", elsok[2], db[elsok[2]]);
Console.WriteLine("{0,3} - húzások: {1,3}", elsok[3], db[elsok[3]]);
Console.WriteLine("{0,3} - húzások: {1,3}", elsok[4], db[elsok[4]]);
Console.ReadLine();
}
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!