頁:
[1]
2
作弊骰子:出現 1、2、3 的機率是 4、5、6 的 1.1 倍
本帖最後由 鄭偉博 於 2017-5-5 04:08 PM 編輯題目要求要將產生的點數印出來且要證明擲出123的機率是擲出456機率的1.1倍
我不知道如何改變骰子擲點數的機率....我思考的方向也很混亂....
<div></div> 假如擲63次骰子
出現11個1點
11個2點
11個3點
10個4點
10個5點
10個6點
這樣就符合"擲出123的機率是擲出456機率的1.1倍"
用if...else if ...來判斷
rand()%63 < 11:print(1)
rand()%63 < 22:print(2)
rand()%63 < 33:print(3)
rand()%63 < 43:print(4)
rand()%63 < 53:print(5)
rand()%63 < 63:print(6) 本帖最後由 鄭偉博 於 2017-5-7 03:29 PM 編輯
kauhia3440 發表於 2017-5-5 09:59 PM static/image/common/back.gif
假如擲63次骰子
出現11個1點
11個2點
那可以假設擲出21次嗎1 5次
2 5次
3 1次
4 3次
5 3次
6 4次
鄭偉博 發表於 2017-5-6 01:18 AM static/image/common/back.gif
那可以假設擲出21次嗎1 5次
2 5次
3 1次
可是這樣跑出3點的機率會很低 本帖最後由 ash1326 於 2017-5-11 02:56 AM 編輯
你沒有使用srand,這樣只有亂數表,沒有影響因子
也就是說不管怎麼跑,結局永遠不變
還有code別貼圖檔...這樣沒人會想幫你run<br><br><br><br><br><div></div> ash1326 發表於 2017-5-11 02:18 AM static/image/common/back.gif
你沒有使用srand,這樣只有亂數表,沒有影響因子
也就是說不管怎麼跑,結局永遠不變
我們老師只教我們用RAND沒有教我們SRAND...
不好意思我是第一次發文看別人也是用圖檔的...謝謝指教 鄭偉博 發表於 2017-5-11 09:49 AM static/image/common/back.gif
我們老師只教我們用RAND沒有教我們SRAND...
不好意思我是第一次發文看別人也是用圖檔的...謝謝指教 ...
如果你是想要絕對機率1.1的話
3樓的寫法可以更改成先抽出21個不重複亂數(1~21)
然後數字<=11的,就使用 rand()%3+1
抽到數字 12~21,就使用 rand()%3+4
這樣就保證擲出123的機率會等於456的1.1倍...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> ash1326 發表於 2017-5-11 12:47 PM static/image/common/back.gif
如果你是想要絕對機率1.1的話
3樓的寫法可以更改成先抽出21個不重複亂數(1~21)
謝謝ash1326,可是我想再請問一下為什麼要用3呢? use v6;
my %construct = 1..6 Z=> 11/63, 11/63, 11/63, 10/63, 10/63, 10/63 ;
my @gonnaPick is default(0);
for %construct -> $pair {
@gonnaPick.push( (loop { $pair.key })[ ^ $pair.value.numerator] );
}
@gonnaPick = ( @gonnaPick ).List.flat();
my %count;
for ^10000 {
my $buffer = @gonnaPick.pick(1);
" $_ time, we pick $buffer".say;
%count{ $buffer }++;
}
say %count;
say qq:to/END/;
1 = { %count{1} } times, rate is { %count{1} / [+] %count.values }
2 = { %count{2} } times, rate is { %count{2} / [+] %count.values }
3 = { %count{3} } times, rate is { %count{3} / [+] %count.values }
4 = { %count{4} } times, rate is { %count{4} / [+] %count.values }
5 = { %count{5} } times, rate is { %count{5} / [+] %count.values }
6 = { %count{6} } times, rate is { %count{6} / [+] %count.values }
END
補充內容 (2017-5-12 10:57 AM):
這是用perl寫的版本,C語言的貼不太上來,太多敏感字!!反正改寫也是不錯的練習(為自己找藉口)!
補充內容 (2017-5-12 11:19 AM):
反正大家說,C語言包括了所有概念,會C語言其他語言都看得懂(藉口其二)!...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> weirdococo 發表於 2017-5-12 10:43 AM static/image/common/back.gif
use v6;
my %construct = 1..6 Z=> 11/63, 11/63, 11/63, 10/63, 10/63, 10/63 ;
我只是個大一上程設不到一個學期的蔡菜鳥阿Q<br><br><br><br><br><div></div> 鄭偉博 發表於 2017-5-12 03:14 PM static/image/common/back.gif
我只是個大一上程設不到一個學期的蔡菜鳥阿Q
#那我加上解說
use v6;
#產生一個hash,有六個key分別是一 到 六,內容分別是抽到他的機率。
my %construct = 1..6 Z=> 11/63, 11/63, 11/63, 10/63, 10/63, 10/63 ;
#用那一個hash來初始化一個array,看齊來大概是 11 個 1 、 11 個 2 ..... 10 個 6
my @gonnaPick is default(0);
for %construct ->...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 關於貼程式碼的問題,可以參考版規喔:
http://www17.eyny.com/thread-8627739-1-1.html (2F有提供兩個允許貼程式碼的外部網址)
對於發問的文章,我覺得會想讓人處理的優先次序是:
文字檔程式碼 > 圖片程式碼 > 都沒給code
(當然也會考慮問題內容跟發問者是否有提供想法)
下面基本上是照2F想法寫的,不過不用 if...else ,直接用計算的方式得出幾點。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DICETIMES 1000000
#define eyny_print printf
int main()
{
int i,r,count={0};
srand(time(NULL));
for(i=0;i<DICETIMES;++i)
{
while((r=rand())>=RAND_MAX/63*63);
r%=63;
++count;
}
for(i=0;i<6;++i)
eyny_print("%d: %d times...%.2lf%%\n",i+1,count,(double)count/DICETIMES*100.0);
return 0;
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 這是我和朋友想出來的
因為包括敏感內容所以用網頁貼上
http://codepad.org/0yqpSZwV
謝謝各位幫忙
因為會的東西真的很少所以有些程式碼我看不懂.... 把你寫的用perl寫了一遍,你會發覺長的一樣,有沒有這樣覺得!my %count;
my @face = ( loop { 1 + [%] (rand * 100).round(1) , 63 , 6 } )[ ^100000 ];
%count{ $_ }++ for @face;
say %count;
"1.2.3的總數除以4.5.6的總數 = { ([+] %count{1..3} ) / ([+] %count{4..6}) }".say;run code online
還有你寫的版本比我的好,我的是硬做出了的! 鄭偉博 發表於 2017-5-12 08:04 PM static/image/common/back.gif
這是我和朋友想出來的
因為包括敏感內容所以用網頁貼上
http://codepad.org/0yqpSZwV
謝謝!!!這樣變得好簡短><
srand(time(NULL));
這行我也不是很懂,老師只教我們用RAND而且也只是用來做這題所以就只是叫我們這題要用這個打而已,
我同學有跟我解釋但我不是很懂,因為亂數%63後就只剩下0~62,再6個6個一數就會剩下3個1.2.3
我覺得這樣想很怪...不太懂Q...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁:
[1]
2