_siikais_ Posted September 2, 2010 Report Share Posted September 2, 2010 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 More sharing options...
codez Posted September 2, 2010 Report Share Posted September 2, 2010 (edited) 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 September 2, 2010 by codez Link to comment Share on other sites More sharing options...
_siikais_ Posted September 2, 2010 Author Report Share Posted September 2, 2010 (edited) 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 September 2, 2010 by _siikais_ Link to comment Share on other sites More sharing options...
Aleksejs Posted September 2, 2010 Report Share Posted September 2, 2010 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 More sharing options...
Леший Posted September 2, 2010 Report Share Posted September 2, 2010 1000x ērtāk būtu izmantot 2^N (ja virkne vienmēr būs šāda) un bināro pārbaudi. Link to comment Share on other sites More sharing options...
_siikais_ Posted September 2, 2010 Author Report Share Posted September 2, 2010 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 More sharing options...
bubu Posted September 2, 2010 Report Share Posted September 2, 2010 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 More sharing options...
Recommended Posts