IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Imre
Člen
Avatar
Imre:2.1.2017 16:22

Zdravím,
potreboval by som generovať čísla v rozmedzí 0 - 735 a aby boli deliteľné číslom 65, skúšal som hľadať na nete ale na nič som neprišiel, vedel by mi niekto poradiť? Ďakujem.

 
Odpovědět
2.1.2017 16:22
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:2.1.2017 16:41

Trosku nesedi ten rozsah nebot limit 735 neni delitelny 65... treba to je jen preklep - pouzij generator 0-11 a vynasob 65, pak to bude 0-715 a vzdy delitelne

Editováno 2.1.2017 16:42
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.1.2017 16:41
Avatar
Odpovídá na Imre
Libor Šimo (libcosenior):2.1.2017 16:45

Upresni svoju poziadavku.

Nahoru Odpovědět
2.1.2017 16:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Imre
Člen
Avatar
Imre:2.1.2017 16:54

áno pomýlil som sa malo byť 715 a veľmi ďakujem za riešenie

 
Nahoru Odpovědět
2.1.2017 16:54
Avatar
Imre
Člen
Avatar
Odpovídá na Jiří Fencl
Imre:2.1.2017 18:40

a dalo by sa nejako ešte ošetriť aby sa každé číslo generovalo iba raz, aby sa nevyskytli dve rovnaké čísla?

 
Nahoru Odpovědět
2.1.2017 18:40
Avatar
Odpovídá na Imre
Neaktivní uživatel:2.1.2017 19:00

Vytvoř si pole (nebo vektor, pokud nevíš, kolik čísel budeš generovat), a do něj si vždy ulož vygenerované číslo. Při každém dalším generování si zjisti, jestli vygenerované číslo již není v poli. Pokud ano, generuj znova a opakuj. Pokud ne, přidej ho do pole a můžeš generovat další číslo.

Editováno 2.1.2017 19:01
Nahoru Odpovědět
2.1.2017 19:00
Neaktivní uživatelský účet
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Martin Dráb:2.1.2017 19:59

Pokud těch možností máš jen 11-12 (nevím, zda se 715 také může objevit, nebo je to už mimo požadovanou množinu), nebo ti nevadí o něco větší paměťová náročnost, udělej si pole boolů, které bude mít pro každé číslo jednu položku. Například nějak takto:

const size_t pocetMoznosti = 715 / 65; // + 1, pokud chces i 715.

bool vyskyt[pocetMoznosti];
. . .
// Generujeme cislo (resp. jeho index v poli)
size_t index = rand() % pocetMoznosti;
// Overujeme, ze se jeste nevyskytlo
if (!vyskyty[index]) {
  // Zaznamename, ze uz se vyskytlo
  vyskyty[index] = true;
  // "Vygenerujeme" samotne cislo
  size_t cislo = index*65;
}

Výhoda spočívá v rychlosti testu na výskyt čísla – časová složitost je konstantní (nezávisí na velikosti pole/počtu možných čísel). Pro takto malé množiny generovaných čísel je to ale v podstat jedno – i postup s ukládáním čísel do pole a jeho procházením bude také fungovat.

Nahoru Odpovědět
2.1.2017 19:59
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.