Jump to content
php.lv forumi

C++ Rand


_siikais_

Recommended Posts

Taatad ir skaitlji 1,2,4,8,16,32. respektiivi skaitlju virkne. Taatad uztaisiiju veelamo funkcija

int RandomNumGen(int NumberCount)
{
int RandomNumber;
int SumNumber;
int NumberSumm=0;
for(int n=0;n < NumberCount;n++)
{
	srand(static_cast<int>(time(NULL)));
	RandomNumber= (rand()%6+1);
	switch ( RandomNumber) {
	  case 1 : 
		SumNumber = 1;
		break;
	  case 2 : 
		SumNumber = 2;
		break;
	  case 3 : 
		SumNumber = 4;
		break;
	  case 4 : 
		SumNumber = 8;
		break;
	  case 5 : 
		SumNumber = 16;
		break;
	  case 6 : 
		SumNumber = 32;
		break;
	}
	NumberSumm=NumberSumm+SumNumber;
}
return NumberSumm;
}

bet probleema ir taa, kaa likt atkaartoti neizveeleeties to skaitli ko ieprieksh jau ir izveeleejies?

Piemeeram es padodu funkcijai veertiibu 3

count=RandomNumGen(3);

un vinjsh man coutn atgriezh 35 kas buus 32 un 2, un 1 summas - tas ir ok un parezi. Bet nedriikst buut piemeeram 36 kas sastaadiitu 32 un 2, un veelreiz 2 summu - tas ir nepareizi. Nedriikst buut atkaartots skaitaamais skaitlis.

 

Paldies jau ieprieksh ;)

Link to comment
Share on other sites

1)Izveido masīvu ar vajadzīgajiem elementiem.

int Numbers[]  = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};

2)sajauc randomā ar random_shuffle vai kā citādi.

std::random_shuffle(Numbers, Numbers + 10);

3)Izvēlies pirmos n elementus un sasummē.

for(int i=0;i<n;i++) Sum+=Numbers[i];

Edited by codez
Link to comment
Share on other sites

neesmu super c++ koderis, varbut vareetu iedot kaadu examplu, jo ja saakshu stradaat ar masiiviem un ieraxtiit masiivaa + saliidzinaat, tas noziime eka naaksies izmantot while ciklu nevis for? veelreiz saku neesmu ljoti advanceets ieksh c++. ;)

 

p.s. paspeeji jau noeditot. meegjinaashu tavu variantu realizeet, atrakstiishos ar rezulaatu

Edited by _siikais_
Link to comment
Share on other sites

viens variants (pseidokods):

funkcija gen(saraksts, dzilums){
elements = izvelamies_randomā_vienu_no_saraksta_elementiem(saraksts);
saraksts_prim = izmest_no_saraksta(saraksts,elements);
if(dzilums > 0) {
elements = elements + gen(saraksts_prim,dzilums-1);
}
else {
return elements;
}
}
summa = gen([1,2,4,8,16,32],3);

Link to comment
Share on other sites

paldies par centieniem paliidzeet atrisinaaju ar codez padomu. Working like a charm. ;)

int Functions::RandomNumGen(int NumberCount)
{
int Numbers[]  = {1, 2, 4, 8, 16, 32};
int NumberSumm=0;
std::random_shuffle(Numbers, Numbers + 6);
       for(int n=0;n < NumberCount;n++)
       {
	NumberSumm=NumberSumm+Numbers[n];
}
return NumberSumm;
}

 

TC

Link to comment
Share on other sites

Jau kuro reizi atkartoju - šī ir browsera valodu (JS, VBA) topiku sadaļa. Nevis jebkuras programmēšanas valodas topiku sadaļa.

Un ja jau lietojam krutus C++ algoritmus (std::random_shuffle), tad lietojam tos līdz galam (std::accumulate):

int Functions::RandomNumGen(int NumberCount)
{
   const int Numbers[]  = {1, 2, 4, 8, 16, 32};
   std::random_shuffle(Numbers, Numbers + sizeof(Numbers)/sizeof(*Numbers));
   return std::accumulate(Numbers, Numbers + NumberCount, 0);
}

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...