Random bez odredjenih brojeva
737
pregleda
12
postova
19. Dec. 2019.
Da li postoji neki ugradjen nacin za odradjivanje randoma bez ponavaljanja u pawnu, tj npr. za bingo hajmo rec da izvlaci 10 brojeva od 1-30 i sad kad izvuce 5 da se izbaci mogucnost ponovnog pojavljivanja 5 u narednih 9 brojeva... znam na osnovu c++ logike kako bih to odradio ali mi je malo previse da pravim niz izvucenih brojeva pa da petlja svaki put kad se rand funkcija odradi prolazi kroz citav taj niz i trazi dal broj vec postoji u nizu bla bla... ili ako ima neko jednostavniji nacin, neku precicu da odradim to. Treba mi za CP za neke poslove najvise, ne gori pod nogama al eto bas me zanima dal postoji nesto vec da se ne mucim beze kad budem radio... Hvala.
20. Dec. 2019.
Mislim da bi ovo trebalo da radi
new randombrojic;
forward RandomBroj();
public RandomBroj()
{
new broj = 5,
test = random(broj);
if(test != randombrojic)
{
randombrojic = test;
// Nastavak funkcije ono ako je razlicit od proslog
}
else
{
//a ako nije razlicit ponovo pokrecemo randombroj sve dok ne dobijem broj koji je razlicit od prethodnog
RandomBroj();
}
return 1;
}20. Dec. 2019.
Napravis iterator i u njemu dodas broj koj se izvuce, kod izvlacenja dodas Iter_Contain tj ako ga ima u iteru da izvlaci ponovo
dodas neku var da broji koji je krug i da prazni iter, valjda si me razumeo
dodas neku var da broji koji je krug i da prazni iter, valjda si me razumeo
20. Dec. 2019.
002 wrote on December 20, 2019, 12:23 am:
Mislim da bi ovo trebalo da radi
new randombrojic;
forward RandomBroj();
public RandomBroj()
{
new broj = 5,
test = random(broj);
if(test != randombrojic)
{
randombrojic = test;
// Nastavak funkcije ono ako je razlicit od proslog
}
else
{
//a ako nije razlicit ponovo pokrecemo randombroj sve dok ne dobijem broj koji je razlicit od prethodnog
RandomBroj();
}
return 1;
}nece moc, ovdje provjerava samo prethodni broj, tako mozes dobit za izvlacenje 5 brojeva od 1-100 da bude 23232 ako me razumijes,
ali,
new ukupanBrojIzvlacenja=hajmorec3;
new randombrojic[ukupanBrojIzvlacenja-1];
forward RandomBroj();
public RandomBroj()
{
new brojac= 0;
new broj = hajmorec5;
new test;
while(brojac != ukupanBrojIzvlacenja)
{
new provjera=false;
test=random(broj);
for(new k=0;k if (test==randombrojic){
provjera=true;
break;
}
}
if (provjera == false){
randombrojic=test;
brojac++;
return test;
}
}
return 1;
} Bunta ovako nesto sam ja zamislio, ne kazem da je kod ispravan(kucam ujutru u 3 i nesto u pauzi bruklina) samo taj princip sam htio koristit, nez jesi i ti isto ovo mislio il je neki ekonomicniji nacin?
20. Dec. 2019.
#define MAX_NUM (10) //najveci broj koji cemo izvuci
new
lastRand = 0;
forward RandNum();
public RandNum(){
if(!lastRand)
lastRand = random(MAX_NUM); //posto nije bilo zadnjeg posljednjeg broja mi postavljamo ovaj
else{
new
test = random(MAX_NUM);
if(lastRand == test && lastrand < MAX_NUM) // provjeravamo da li je zadnji broj jednak izvucenom i da li je na granici
lastRand = ++test;
else if(lastRand == test && lastRand == MAX_NUM)
lastRand = --test;
}
printf("Izvukli smo: %i", lastRand);
return true;
}
Ja sam ovo sklepao sto mi je palo na pamet kao najjednostavniji nacin.
20. Dec. 2019.
Salesman ovaj kod sto si napiso ne da nea veze s ovim sto meni treba nego nea veze s mozgom kolko ja vidim, al opet mozda sam ja glup...
Bunta nisam bas shvatio kako si mislio zato sam te i pito jesi na taj fazon konto, de napisi kod ako nije problem...
Bunta nisam bas shvatio kako si mislio zato sam te i pito jesi na taj fazon konto, de napisi kod ako nije problem...
20. Dec. 2019.
#include
#include
#define MAX_RANDOM 30
#define BROJ_PRESKAKANJA 9
new Iterator:Brojevi;
new broj, BrojCiklusa[MAX_RANDOM+1];
stock randomf(){
while(Iter_Contains(Brojevi,broj)){
broj = random(MAX_RANDOM);
}
foreach(new i : Brojevi){
if(BrojCiklusa > 0){
BrojCiklusa--;
}
else{
BrojCiklusa = 0;
Iter_SafeRemove(Brojevi,i,i);
}
}
Iter_Add(Brojevi,broj);
BrojCiklusa = BROJ_PRESKAKANJA;
return broj;
}
public OnGameModeInit()
{
Iter_Init(Brojevi);
broj = random(MAX_RANDOM);
Iter_Add(Brojevi,broj);
BrojCiklusa = BROJ_PRESKAKANJA;
// Testiranje
for(new i = 0; i < 15; i++){
printf("%d", randomf());
}
return 1;
}
20. Dec. 2019.
#define MAX_RAND_NUM (48)
#define RAND_NUMS (6)
new bool: taken[MAX_RAND_NUM char],
RandNumbers;
for(new i = 0, tmp; i < RAND_NUMS; ++ i) {
do tmp = random(MAX_RAND_NUM);
while(taken{tmp});
RandNumbers = tmp;
taken{tmp} = true;
}Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava