注册 登录
编程论坛 C++教室

[求助]模拟掷骰子的过程

a8451727 发布于 2007-05-26 14:21, 1839 次点击

请教一个:模拟掷骰子的过程。

*抛掷2颗骰子,每颗骰子的点数为随机数1-6。
*抛掷次数由用户输入
*要求输出两颗骰子的相加点数,如:用户输入抛掷次数为:5
有: 5 3 --8 点
4 6 --10点
2 6 --8 点
1 5 --6 点
3 3 --6 点
*计算出两颗骰子的和,在抛掷次数出现的概率如:8点出现2次=2/5;

感觉不是很难,但被概率那难住了。各位

14 回复
#2
zkkpkk2007-05-26 15:36

用rand()产生伪随机数,用%运算符来限制范围,抛一次色子就是调用两次rand(),没记错的话rand()在stdlib.h里

#3
a84517272007-05-27 23:18

我发得出了没

#4
a84517272007-05-27 23:20
晕,两天都问不了。
我想问下,要怎样才可以得到某一特定点数出现的次数?
就比如抛掷10次中,6点出现了3次,要怎样才能把3次提取出来?
谢了
#5
zkkpkk2007-05-28 08:44
给一个变量,这个变量就是需要算概率的点数,如果出现和变量相同的点数时候就用一个初值为0的计数变量自增,计数变量的次数就是你需要的次数
#6
nuciewth2007-05-28 23:55
for(int i=0 ; i<10;i++)
{
a[rand()%6+1]++;//记录,初始化为0.
}
#7
a84517272007-05-29 14:44

晕```。为什么我循环时,每个随机数都一样的? 帮我看下错哪了
这步都不会,下面的写不下去啊

//类文件:
#include <stdlib.h>
#include "time.h"
class RandomInt
{
public:
RandomInt();
RandomInt(int n,int m);
static double diem(int n,int m);
static double dien(int n,int m);
};

inline double RandomInt::diem(int n,int m)
{
return rand()%m+n;
}
inline double RandomInt::dien(int n,int m)
{
return rand()%m+n;
}

/************************/
函数:
#include <iostream>
#include "RandomInt.h"
#include "time.h"
using namespace std;

void main()
{
srand((unsigned)time(NULL));
int die1=RandomInt::diem(1,6),
die2=RandomInt::dien(1,6);
cout <<"请输入抛掷次数:";
int n;
cin >>n;
cout <<"得出随即数为:"<<"\n";
for(int i=1;i<=n;i++)
cout <<die1<<"\n"
<<die2 <<"\n\n";
}

//如果我直接用:
for(int i=1;i<=n;i++)
cout <<RandomInt::diem(1,6)
<<RandomInt::diem(1,6);
他就能循环出不同的随机数,为什么赋值给die1,die2后就不行了?

#8
zkkpkk2007-05-29 17:33
回复:(a8451727)晕```。为什么我循环时,每个随机数...
你用系统时间做随机种子
#9
a84517272007-05-29 17:37
我不懂用系统时间做种子
还没学到呢``。
#10
a84517272007-05-30 01:09
等着师兄姐们回答呢
#11
wfpb2007-05-30 01:37
晚上无聊睡不着,帮你写了。
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
void main()
{
    srand(time(0));
    int num;
    scanf(\"%d\",&num);
    int p[12]={0};
    for(int i=0;i<num;i++)
    {
        int a=rand()%6+1;
        int b=rand()%6+1;
        printf(\"%d  %d  --%d 点\n\",a,b,a+b);
        p[a+b-1]++;
    }
    for(int j=0;j<12;j++)
    {
        if(p[j]!=0)
        {
            printf(\"%d出现的概率为:%0.2f\n\",j+1,(float)p[j]/num);
         }
    }
}
#12
a84517272007-05-30 02:40

先谢过wfpb了。
不过老实说我没学C语言就直接学C++的
有点看不懂
不过我还是很感激。

#13
wfpb2007-05-30 10:38
scanf("%d",&num);
--> cin>>num;

printf("%d %d --%d 点\n",a,b,a+b);
--> cout<<a<<" "<<b<<" --"<<a+b<<" 点"<<endl;

printf("%d出现的概率为:%0.2f\n",j+1,(float)p[j]/num);
--> cout<<j+1<<"出现的概率为:"<<fixed<<setprecision(2)<<(float)p[j]/num<<endl;
#14
a84517272007-05-30 11:27

哈哈,谢啦。

#15
aipb20072007-05-30 11:34
呵呵!
1