• ベストアンサー

乱数について2

「3つのサイコロを振ったときの目の和を100回シュミレートしなさい。」という問題があるんですが、 「int(rand(6))+int(rand(6))+ int(rand(6))+ 3」としてもエラーとなります。これは、間違ってるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • AkiraND
  • ベストアンサー率52% (10/19)
回答No.2

Excelのシート上で展開するなら =int(rand()*6)+1 + int(rand()*6)+1 + int(rand()*6)+1 でこれを100回コピーする ってのはどうでしょう? (前回の質問を参考にExcelと仮定してみました) VB/VBAならryoyamaさんのとおりだと思います。

daidaibou
質問者

お礼

たびたびすみません。ありがとうございました。

その他の回答 (1)

回答No.1

カテゴリが「Microsoftアプリケーション」なのですが、言語が何かわかりません。 推測で、VBまたはVBAと仮定してお答えします。 正しくは、 Int(Rnd * 6 + 1) + Int(Rnd * 6 + 1) + Int(Rnd * 6 + 1) です。 Excel VBAのヘルプのサンプルに載っていました。

daidaibou
質問者

お礼

説明不足ですみませんでした。ありがとうございました。

関連するQ&A

  • エクセルで「乱数」を出す@関数は?

    「1-2-3」では、乱数を出す関数は「@INT(@RAND*400)+1」で1~400の間のアットランダムな乱数をさながらサイコロのように出すことが出来るのですが、エクセルではそういう関数があるのでしょうか? 是非教えて下さい。

  • すごろくに使用するサイコロ

    以下の問題についてお願いします。 すごろくに使用するサイコロの目を生成するプログラムを作成せよ。 rand関数を用いて1から6の整数乱数を発生させ表示させるとともに、以下のルールに従う表示を行うこと。 サイコロの目が1の場合には「mouikkai」と表示する サイコロの目が4の場合には「ikkai yasumi」と表示する このルールに従い、サイコロを20回振った場合の結果を示せ。 randを用いて以下のように考えましたが、補足をお願いします。 #include <stdio.h> #include <stdlib.h> void main (void) /*サイコロ*/ { int i,x; for(i=0;i<20;i++){ x=(int)(6*(rand()/32767.1)+1); printf("%d",x); } }

  • メルセンヌツイスターによる乱数の使い方

    メルセンヌツイスターによる乱数を生成したいのですが、下記コードにすると、mt_rand関数を呼ぶたびにシードが初期化され他乱数が生成されます。 やりたいことは、main関数で一度シード101で初期化した後は、mt_rand関数内では、初期化することなく継続した乱数を生成したいのです。 そのためa_mt_rand関数のようにすると、mtが定義されていないとなるエラーとなります。 namespaceの問題と思うのですが、色々試してみましたが、できませんでした。 どのようにすればできるでしょうか。 vc++11、windows11 使用 参考サイト C++ 乱数ライブラリ std::random の使い方 リンクはうまく貼れませんでした。 #pragma hdrstop #include <iostream> #include <stdio.h> #include <random> using namespace std; void mt_rand(void); int main(int argc, char *argv[]) { int ptr; std::mt19937 mt(101); // メルセンヌツイスターの32ビット版、引数は初期シード std::uniform_int_distribution <> rand100(0, 100); // [0, 99] 範囲の一様乱数 ptr = rand100(mt); printf("ptr=%d\n",ptr); mt_rand(); } void mt_rand(void) { int ptr=0; std::mt19937 mt(101); // メルセンヌツイスターの32ビット版、引数は初期シード std::uniform_int_distribution <> rand100(0, 100); // [0, 99] 範囲の一様乱数 ptr = rand100(mt); printf("%d\n",ptr); } void a_mt_rand(void) { int ptr=0; ptr = rand100(mt); printf("%d\n",ptr); }

  • Perlの乱数について

    RedHat Linux ES2.1のperl v5.6.1にて初めてのプログラムを書いているものです。 Oracle9iに格納するDATE型のデータを大量に乱数にて作成しようとしているのですが、うまくいきません。 作成しようとしているのは2004年度か2005年度のある日付です(30日まで)。 例) 04-01-30 05-07-12 04-09-28 04-12-11 質問1.下のプログラムだと、年度が00,01,02,03,04,05の値をとり得てしまう。これを04か05に限定するにはどうすればよいか。 質問2.月・日が1桁の場合は0を頭につけたい。下のプログラムでは05-12-1となったり04-5-30となったりしてしまう。 #!/usr/bin/perl $a = 1; while($a < 100000){ $year_rand = int(rand(5)); $month_rand = int(rand(12))+1; $day_rand = int(rand(30))+1; print "0$year_rand-"; print "$month_rand-"; print "$day_rand,"; print "\n"; $a = $a+1; } 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 乱数について

    C の入門書を1冊読み終え、簡単なプログラムを作成しようとしているのですが、 早速分からないことが出たので教えて頂ければと思います。 --------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int num; int i = 0; while( i < 4 ){ srand(time(NULL)); num = rand()%100; printf("%d\n", num); i++; } return 0; } --------------------------------------------- 上記を実行したのですが、秒数を乱数の種としているため4回とも同じ値を取得してしまいます。 より高精度に秒数を取得することは可能でしょうか? もしくはこのようなかたちで4回ともに異なる数を得ることが出来る方法がありましたら教えて頂きたいと思います。

  • 乱数について

    乱数の分布を見るために以下のようなプログラムを書きました。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i,imax, S[RAND_MAX], r; double x,y; FILE *output1; output1=fopen("random2.data","w"); imax=100000; for(i=0;i<=imax;i++){ r = rand(); S[r] += 1; } for(i=0;i<=RAND_MAX;i++){ fprintf(output1,"%d %d \n",i,S[i]); } return 0; } するとコンパイルできて実行もできるのですが、なぜか乱数が30000を 超えるくらいのところでおかしな値になりました。 原因がわからないのでどなたか教えてください。

  • 99BASICプログラムの乱数の計算について

    学校で出た問題で、サイコロを2個振り、(乱数生成で代用)出た目の和がどのような 確率で分布するか調べなさい、と出たのですが、問1のプログラムがあっているのかと、問2を ヒントだけでも教えてください。お願いします。 問題↓ 回数を記憶する配列 f( ) を用意 1 r1=rnd(6)+1:r2=rnd(6)+1  2個のサイコロを振るr1、r2は1から6の目を生成 2 r=r1+r2 出た目の和を求める 3 f(r)=f(r)+1 和がrである回数を求める 4 1から3までを50000回繰り返す 5 cint(f(r)/f(2))をr=2からr=12まで順に表示する 問1 アルゴリズムに沿ったプログラムリストを示せ 問2 cint(f(r)/f(2))の表示結果を示し、簡単にその妥当性を検討せよ で、書いたプログラムが 10 dim f(12) 20 for i=1 to 50000 ←ここでサイコロを振る回数を決める? 30 r1=rnd(6)+1:r2=rnd(6)+1 40 r=r1+r2 50 f(r)=f(r)+1 60 next i 70 for i=1 to 6 80 print cint(f(r)/f(2)) 90 next i 100 end で、結果が縦に3が6個ならんだのですが、問1はこれでいいのでしょうか。 問2の妥当性ってどういうことでしょうか。

  • 乱数発生

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。

  • さいころの問題

    さいころの和に関する問題です。 n回さいころを振った時、出た目の総和が2nになる確率はどのように求まるのでしょうか。よろしくお願いします。

  • 期待値の求め方

    2つのさいころを振る。 出た目の和がはじめて6の倍数になるまで振るとき、その回数の期待値を求める 2つのサイコロを1回ふって出た目の和が 6の倍数になるのは (3,3)(2,4)(4,2)(5,1)(1,5)(6,) 6/36=1/6 ですが、 期待値はどのようにしてもとめるのですか? 詳しくお願いします

専門家に質問してみよう