webForumDet fria alternativet

Hur gör man bäst.

ASP

3 svar · 302 visningar · startad av alfa

Medlem sedan juni 2000202 inlägg
Frågan#1

Hur ska man göra bäst för att slumpa ut dessa nummer ett och ett

nummer

1st 1000
2st 500
10st 100
20st 50
50st 20
100st 10
200st 5
12669st 0

Om man tar den första som är 1000 så får den bara förekomma en gång.

Tar man den sista så ska den komma upp 12669 gånger.

Måste bli på något sätt att den ska räkna ner om en blivit använd.

Hoppas ni förstår vad jag menar

Alfa

Medlem sedan juli 2001434 inlägg
#2

Jag antar att det är ordningen som ska vara slumpade, eftersom nummren och antalet verkar vara fasta...

Att göra någon slumpfunktion för detta som ska vara bra kräver en del sannolikhets lära, något jag inte är spec bra på.

Men grundidéen som jag kom på var typ denna:

1. Sätt init variablerna till antalet

ex
antal1000 = 1
antal500 = 2
antal100 = 10
antal50 = 20
osv

2. Slumpa ut en siffra beroende på sannolikhet... här får du nog fråga nån annan, men här är en "ovettig"

Randomize 'för att det ska slumpas...

while antal1000 + antal500 + antal100 ... > 0 
  randomValue = 8 * Rnd() + 1   
  intRandomValue = Int(randomValue)

  select case intRandomValue
    case 1
      if antal1000 > 0 then
        Response.write "1000, "
        antal1000 = antal1000 - 1
      end if
    case 2
      if antal500 > 0 then
        Response.write "500, "
        antal500 = antal500 - 1
      end if
    case 3
      if antal100 > 0 then
        Response.write "100, "
        antal100 = antal100 - 1
      end if
  end select

loop

Detta är inte den snyggaste koden ... men det var enkelt att göra...
Grejjen är att det hela tar väldigt mycket extra tid... för när en har "tagit slut" ... så kommer var 8:e loop att vara i onödan...
när två, var 4:e .. när 3, var 3/8 ...
det betyder att när det är ett nummer kvar så kommer den loopa 8 ggr (ca) för att få fram just det nummret... vilket inte är spec bra....
Men det funkar.. :)

Nån kan säkert förbättra...

Medlem sedan juni 2000202 inlägg
#3

Man ska bara få ut ett av nummerna varje gång
man öppnar sidan.

Tex
1 gången blir det 5
nästa blir det 10
3 blir 50
4 blir 5
5 blir 0
6 blir 0
7 blir 5
osv

1st 1000
2st 500
10st 100
20st 50 = 20 - 1 = 19
50st 20
100st 10 = 100 - 1 = 99
200st 5 = 200-3 = 197
12669st 0 = 12669 - 2 = 12667

tills alla har varit använda tills alla står på noll

Men man måste registrera om en blivit använd
gör man lättast mot en databas

Det som är frågan är hur man slumpar fram vilken
man ska ta bäst och alla måste bli använda en gång
D.V.S tex 100 ska komma fram 10 gånger av 14000
och 0 ska komma fram 12669 av 14000

osv

Alfa

Medlem sedan juni 2000202 inlägg
#4

Dim MySQL
Dim Con
Const adOpenKeyset=1

MySQL = "SELECT tal.tal, tal.antal FROM tal;"
Set objRecordset1 = Server.CreateObject("ADODB.Recordset")
objRecordset1.Open MySQL, Con, adOpenKeyset
n = objRecordset1.Recordcount

dim vinstnummer(10)
Dim vinstnummer_antal(10)

Det som finns i databasen

tal 1000 Antal 1
tal 500 Antal 2
tal 100 Antal 10
tal 50 Antal 20
tal 10 Antal 100
tal 5 Antal 200
tal 0 Antal 12000

for i = 1 to n
tal = objRecordset1("tal")
antal = objRecordset1("antal")

alla_tal = alla_tal -- antal
if tal = 0 or antal = 0 then
Else
	
	vinstnummer(i) = tal
	vinstnummer_antal(i) = antal
	antal_vinster = abs(antal_vinster -- antal)
End if

objRecordset1.MoveNext
next
set objRecordset1 = nothing

Randomize Timer
Slump_tal = INT(RND*alla_tal) + 1

Om slumptalet är mindre än antal_vinster

if Slump_tal =< antal_vinster then

Else
response.write "Ingen vinst"
End if

Den ska välja efter databasen

Om slumpalet är 4 så ska den välja tal 100
Eller om slump talet är 180 ska den välja tal 5
Eller om slumptalet är 15 ska den välja tal 50

Är slumptalet högre än 333 går den in i else
Och skriver "ingen vinst"

Hur ska få till det på bästa sätt?

Alfa

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)