Olen yrittänyt pähkäillä seuraavaa tehtävää viikon ajan ja kysyisin nyt neuvoa teiltä ratkaisemiseksi. Tehtävä kuuluu näin: Tee ohjelma, joka kysyy käyttäjältä kuinka monta lukua hän haluaa syöttää. Kysy luvut ja laske kuinka monta kertaa kukin luku syötettiin.
Olen tehnyt jo toimivaksi kohdat, joissa ohjelma pyytää tietyn määrän lukuja, jonka mukaan se lisää käyttäjän antamat luvut taulukkoon. Nyt ongelman on se, etten keksi mitään järkevää algoritmia samojen lukujen yhteenlaskemiseksi, ja niiden lopusssa ilmoittamiseen. Sen olen ajatellut, että ohjelmassa tulisi varmaankin käyttää Array.LastIndexOf-metodia, mutta en ymmärrä kuinka sitä käyttää tässä. Teoriamonisteesta ei ollut hyötyä, koska siinä oli vain yhden luvun tulostaminen, ja siinäkin oli virheitä. Voisinko siis saada vaikka edes pseudo-koodin, yhden luvun syöttömäärän yhteenlaskuun?
Jos Luvut on Array joka sisältää ne syötetyt luvut, tyyliin
int[] Luvut = { 2, 3, 6, 4, 3, 4, 6, 4 };
Niin esimerkiksi näin saisi kerrottua montako kertaa mikäkin luku esiintyy:
foreach (var l in Luvut.GroupBy(a => a)) { Console.WriteLine("Luku {0} esiintyy {1} kertaa.", l.Key, l.Count()); }
Kiitos! Tuo auttoi hommaa.
Toisena vaihtoehtona voisit järjestää luvut vaikka pienimmästä suurimpaan ja sitten vertailla peräkkäisiä lukuja. Grezin vastaus toki on miellyttävämmän näköinen, mutta arvelisin sinun joutuvan pienehköön pulaan jos et osaa vastata mitä siinä tapahtuu.
Sinänsähän tulee nopeasti luokkaa kymmenen tapaa tehdä tuo asia. Pidän esittämääni tapaa siinä mielessä hyvänä, että koodista näkyy hyvin helposti suoraan mitä ollaan tekemässä.
Lisäksi olisi jokseenkin absurdia lähteä ilman hyvää syytä toteuttamaan itse frameworkiin sisältyviä algoritmeja.
Toisaalta kurssin lähtökohtia tuntematta on vaikea sanoa onko tarkoitus harjoitella perusalgoritmeja vai opetella C#-ohjelmointia.
Tutustuin noihin Grezin komentoihin tarkasti, jonka myötä käsitin mitä tapahtuu. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.