Jak velká můžou být ta čísla, která načítáš? Jestli se vejdou do 8 bitů (byte nebo shortint), tak to pohodlně vyřešíš množinou (var mnozina: set of byte). Každé načtené číslo do ní vložíš (mnozina:=mnozina+cislo) a ono už se automaticky zařídí, že v ní nic nebude víckrát. Nakonec v cyklu přes všechny možné hodnoty otestuješ, které z těch hodnot v množině jsou, a u těch, co jsou, zvýšíš nějaké počítadlo (for i:=... do if i in mnozina then inc(pocitadlo)).
Nevím, v jakém překladači pracuješ. Některé možná dovolí i větší rozsahy množin než 8 b.
Interně je množina bitové pole. Princip: máš pole čísel (bytů nebo wordů), jejich jednotlivé bity bereš jako booleany (číslo v množině je/není), index bitu znamená hodnotu čísla. Dá se to naprogramovat i ručně, já už to mám hotové a můžeš si to i stáhnout, akorát je v tom víc assembleru, než se od nováčků očekává :-).
Načtu ze souboru číslo, dejme tomu 50. Tak padesátý bit v poli nastavím na 1. Atd. Nakonec spočítám jedničkové bity.
V tomhle
Zasláno z mobilního telefonu.