macbok 充电器亮黄灯:求"掷色子"的C语言算法,或代码...

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 18:08:41
编程高手帮忙一下.
给个C算法,或者代码也行...
拜托了.
一楼回答的不错.谢谢...
可是这回问题出来了. 一楼的代码中所用的产生随机数的函数是C里附带的吧.
其实我想知道的是,怎么样用C语言编出一个可以产生随机数的程序.是自己编的,而不是利用机器里产生随机数的那个机制.

是“掷骰子”吧?!!这是掷骰子的程序:题目是这样子的:编写一个模拟掷骰子的程序,每个骰子从1-6,所以两个骰子组合数从2-12,随机投掷10000次,打印所有组合出现的概率!

#include<iostream.h>
#include<time.h>
#include<stdlib.h>
void main()
{
int i=0;
float a[13]={0};
srand((unsigned)time(NULL));
int num1=0,num2=0;
for(i=1;i<=10000;i++)
{
num1=rand()%6+1;
num2=rand()%6+1;
a[num1+num2]++;
a[0]++;
}
for(i=2;i<=12;i++)
{
cout<<i<<' '<<' ';
cout<<(a[i]/a[0])*100<<'%';
cout<<endl;
}
}

很难啊

仔细想一想, 如果很简单, 软件干吗要提供一个随机数生成函数呢!!!

可以获得当前时间,毫秒级...
然后就...随便自己用什么方法,比如取余...
就可以大至实现随机功能

下面程序自己实现伪随机。之所以称“伪随机”,是因为只要种子一样就会得到完全一样的随机数序列,只是在取值的概率分布上符合随机概率分布。
从概率论角度可以算出此题精确的概率分布为:
p[2]=1/36,p[3]=2/36,...,p[7]=6/36,p[8]=5/36,p[9]=4/36,...p[12]=1/36。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <time.h>

int my_rand_seed = time(NULL);

int my_rand()
{
my_rand_seed &= 0x7fffffff;
my_rand_seed = (int)(((long long)my_rand_seed*20050003 + 30050047)%INT_MAX);
return my_rand_seed;
}

#define TIMES 10000

int main()
{
int count[12 + 1];
int i;
memset(count, 0, sizeof(count));
for (i = 0; i < TIMES; i++)
{
int dice1, dice2;
dice1 = (my_rand()%6) + 1;
dice2 = (my_rand()%6) + 1;
count[dice1 + dice2]++;
}
for (i = 2; i <= 12; i++)
{
printf("[%d] %.4f\n", i, (float)count[i]/TIMES);
}
return 0;
}