:) Det låter som den gamla klassiska "Du är med i en utlottning i TV. Du har tre dörrar. Bakom en finns högvinsten och bakom de andra två inget alls. Du får välja en dörr. Efter att du gjort ett val går programledaren fram och öppnar en dörr som du =inte= valt och visar att den är tom. Så frågar han dig, vill du byta till den andra oöppnade dörren eller vill du stå kvar vid ditt första val?"
Det rätta svaret är att man vill byta, för då är sannolikheten att vinna dubbelt så hög. Till en början känns det förbryllande att det är så, för man tycker ju att sannolikheten borde vara lika hög eftersom man ju bara har två dörrar att välja mellan då och chansen är 50/50. Fast chansen är inte 50/50. Man begår ett tankefel när man tycker så. Men det kan vara klurigt att inse var man tänker fel, för det känns ju så rätt...
Jag insåg det inte förrän jag satte mig ner och skrev ett datorprogram. Jag behövde dock aldrig köra programmet, för medan jag skrev det blev jag ju medveten om vad det var jag gjorde. Instruktionerna jag gav till datorn i programkoden ledde ovillkorligen till att den valde dörren man bytte till dubbelt så ofta som dörren man först valt...
"Hur 17 kan det bli så?", tänkte jag. Sedan såg jag var jag hade tänkt fel och förstod varför sannolikheten är dubbelt så hög.
Har du lyckats klura ut svaret än, varför chansen ökar till det dubbla om man byter?
Jag gick i ettan på gymnasiet när jag fick den här uppgiften och skrev mitt program. Det är nio år sen nu. Tiden går fort.
Var i koden är det du stöter på problem? Slumptalsgenereringen?
För övrigt behövs det inga beräkningar för att ta reda på svaret. Det är en helt logisk uppgift. Om man bara lyckas glömma tankarna på 50/50 så är det väldigt enkelt.
i början 3 alternativ, dvs 33% chans att man väljer rätt.
Sedan när en tas bort så bör man byta eftersom det då är 50% chans! Chansen att man väljer rätt på första försöket är alltså mindre än när man byter och det bara finns 2 alternativ kvar.
kommer inte ihåg exakt dock..
har inte kört fast eftersom jag e kass o inte änns vet hur jag skall börja :D
Nja, nästan. Den sammanlagda sannolikheten för alla möjligheter är ju alltid 100%. Så, om du har 33% på den ena av två möjligheter måste det vara 67% på den andra. Inte 50.
Chansen är ju 2/3 om du byter, för, om du väljer fel dörr från början (chansen för detta är ju 2/3) blir det rätt om du byter, för den andra felaktiga dörren öppnar ju programledaren!
Angående programkoden...
Börja från början!
Vad är det du ska göra först? Jo, vinsten ska ju slumpmässigt placeras ut bakom en av dörrarna. Kalla dörrarna för 1, 2 och 3. Ta fram ett slumptal mellan 1 och 3 och lagra det i en variabel som du kallar för korrektLucka (exempelvis).
Sedan tar du fram ett nytt slumptal mellan 1 och 3 som symboliserar den tävlandes första val. Kalla det för valdLucka.
Om valdLucka = korrektLucka så vinner man om man står kvar.
Annars vinner man om man byter.
Och det är ju precis så det funkar i verkligheten, och det säger ju sig nästan självt också, för om du inte tänker byta, då är ju enda sättet att vinna att välja rätt lucka med en gång! För väljer du fel lucka från början får du ju den rätta om du byter...
(Och när man har insett det där behöver man ju inte skriva ett program egentligen, för det är ju logiskt att om slumpningen sker helt slumpmässigt blir sannolikheten för vinst 1/3 om man står kvar och 2/3 om man byter.)
En smula OT, visst måste väl sannolikheten vara 50/50 när man sen slumpar mellan de två kvarvarande?
Då finns det ju bara två alternativ så chansen måste ju bli 50% att det ena går in.
Hmmm nu har jag överträffat mitt förstånd och fastnat i min kod :D
<%
cnt = 0
do while not cnt = 1000
%>
<%
cnt = cnt+1
dim korrekt, vald, bort
randomize
korrekt = INT(RND*3)+1
vald = INT(RND*3)+1
bort = INT(RND*3)+1
do while bort = korrekt or bort = vald
bort = INT(RND*3)+1
loop
if korrekt = vald then
response.write("VINST")
else
response.write("NIT")
%>
<% loop %>
Jo visst men jag e n00b så min kod går antagligen att göras en femtedel så stor snabb o såvidare haha :D
<%
vinst = "0"
nit = "0"
cnt = "0"
do while not cnt = "100000"
%>
<%
cnt = cnt+1
dim korrekt, vald, bort
randomize
korrekt = INT(RND*3)+1
vald = INT(RND*3)+1
bort = INT(RND*3)+1
do while bort = korrekt or bort = vald
bort = INT(RND*3)+1
loop
if korrekt = vald then
vinst = vinst+1
else
nit = nit+1
end if
%>
<% loop %>
utan att byta : <br>
Vinst : <%=vinst/1000%><br>
Nit : <%=nit/1000%>
<br><br><br><br><br><br><br><br>
<%
vinst2 = "0"
nit2 = "0"
cnt = "0"
do while not cnt = "100000"
%>
<%
cnt = cnt+1
dim korrekt2, vald2, bort2
randomize
korrekt2 = INT(RND*3)+1
vald2 = INT(RND*3)+1
bort2 = INT(RND*3)+1
do while bort2 = korrekt2 or bort2 = vald2
bort2 = INT(RND*3)+1
loop
vald3 = vald2
do while vald2 = vald3 or vald2 = bort2
vald2 = INT(RND*3)+1
loop
if korrekt2 = vald2 then
vinst2 = vinst2+1
else
nit2 = nit2+1
end if
%>
<% loop %>
Med byte : <br>
Vinst :<%=vinst2/1000%><br>
Nit : <%=nit2/1000%>
265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2