Atsitiktiniai skaičiai be pasikartojimų

Problemos formulavimas

Tarkime, kad reikia sukurti sveikųjų atsitiktinių skaičių rinkinį be pasikartojimų tam tikrame reikšmių diapazone. Pavyzdžiai keliaujant:

  • unikalių atsitiktinių kodų generavimas produktams ar vartotojams
  • žmonių priskyrimas užduotims (kiekvienas atsitiktinai iš sąrašo)
  • žodžių permutacija paieškos užklausoje (labas, seo-shnikam)
  • žaisti loteriją ir pan.

1 būdas. Paprastas

Pirmiausia apsvarstykime paprastą variantą: turime gauti atsitiktinį 10 sveikųjų skaičių nuo 1 iki 10 rinkinį. Naudojant „Excel“ integruotą funkciją TARP BYLOS (KRAŠTAS TARP) unikalumas negarantuojamas. Jei įvesite jį į lapo langelį ir nukopijuosite 10 langelių, pasikartojimai gali lengvai įvykti:

Atsitiktiniai skaičiai be pasikartojimų

Todėl eisime kitu keliu.

Visos „Excel“ versijos turi funkciją RANK (RANG), skirtas reitinguoti arba, kitaip tariant, nustatyti aukščiausią skaičiaus poziciją aibėje. Didžiausias skaičius sąraše turi rank=1, antrasis viršuje – rank=2 ir t.t.

Įveskime funkciją į langelį A2 SLCHIS (RAND) be argumentų ir nukopijuokite formulę 10 langelių žemyn. Ši funkcija sugeneruos mums 10 atsitiktinių trupmeninių skaičių nuo 0 iki 1 rinkinį:

Atsitiktiniai skaičiai be pasikartojimų

Kitame stulpelyje pristatome funkciją RANKnustatyti kiekvieno gauto atsitiktinio skaičiaus poziciją reitinge:

Atsitiktiniai skaičiai be pasikartojimų

B stulpelyje gauname tai, ko norėjome – bet kokį norimą nesikartojančių sveikųjų skaičių nuo 1 iki 10.

Grynai teoriškai gali susidaryti situacija, kai SLCHIS duos mums du identiškus atsitiktinius skaičius A stulpelyje, jų eilės sutaps ir gausime pakartojimą stulpelyje B. Tačiau tokio scenarijaus tikimybė yra itin maža, atsižvelgiant į tai, kad tikslumas yra 15 ženklų po kablelio.

Metodas 2. Sudėtingas

Šis metodas yra šiek tiek sudėtingesnis, tačiau naudojamas tik viena masyvo formulė. Tarkime, kad turime sukurti 9 nesikartojančių atsitiktinių sveikųjų skaičių sąrašą nuo 1 iki 50 lape.

Įveskite šią formulę langelyje A2, spustelėkite pabaigoje Ctrl + Shift + Enter (norėdami įvesti ją kaip masyvo formulę!) ir nukopijuokite formulę iki norimo langelių skaičiaus:

Atsitiktiniai skaičiai be pasikartojimų

3 būdas. Makro

Ir, žinoma, galite išspręsti problemą naudodami „Visual Basic“ programavimą. Viename iš senų straipsnių apie atsitiktinę atranką jau paminėjau Lotto masyvo makrokomandą, kuri iš tam tikro intervalo sukuria reikiamą skaičių atsitiktinių nesikartojančių skaičių.

  • Kaip suskaičiuoti unikalių verčių skaičių diapazone
  • Atsitiktinis elementų pasirinkimas iš sąrašo

Palikti atsakymą