码迷,mamicode.com
首页 > 编程语言 > 详细

模拟算法_掷骰子游戏&&猜数游戏

时间:2016-03-23 22:14:24      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:

模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,C语言中是用srand()和rand()函数来生成随机数。

先来介绍一下随机数的生成:

1.产生不定范围的随机数

   函数原型:int rand()

 产生一个介于0~RAD_MAX间的整数,其具体值与系统有关系。Linux下为2147483647。我们可以在include文件夹中的stdlib.h中可以看到(Linux在usr目录下,Windows在安装目录下)

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5         int i;
 6         for(i=0; i<10; i++)  //随机产生10个数。
 7         {
 8             printf("%d\n", rand());
 9         }
10         return 0;
11 }

 

2.产生指定范围的随机数(产生0到某个数的随机数)

Radom(x)(rand()%x)  [0,x)

 

#include<stdio.h>
#include<stdlib.h>
#define Random(x) (rand() % x) //通过取余取得指定范围的随机数
int main()
{
        int i;
        int dis;               //产生[0, dis)之间的随机数,注意不包括dis
        for(i=0; i<10; i++)
        {    
            printf("%d\n", Random(dis));
        }
        return 0;
}

 

3.生成指定范围的随机数
  要求:指定范围(m,n),随机数包括m,n;

  方法:将范围(m,n)改变到(0,x)最后再转移回去。

  1)m=n。此时并不算严格意义上的随机数,返回m;

  2)m>n。令pos=n,距离差dis=m-n+1

      返回rand()%dis+pos;

  3)n>m。令pos=n,距离差dis=n-m+1

      返回rand()%dis+pos;

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h> 
 4 int Random(int m, int n)
 5 {
 6         int pos, dis;
 7         if(m == n)
 8         {
 9             return m;
10         }
11         else if(m > n)
12         {
13             pos = n;
14             dis = m - n + 1;
15             return rand() % dis + pos;
16         }
17         else
18         {
19             pos = m;
20             dis = n - m + 1;
21             return rand() % dis + pos;
22         }
23 }
24 int main()
25 {
26         int i, m, n;
27         srand((int)time(NULL));
28         m = -3;
29         n = -7;
30         for(i=0; i<10; i++)
31         {
32             printf("%d\n", Random(m, n));
33         }
34         return 0;
35 }

 

下面给出掷骰子游戏和猜数游戏的代码:

掷骰子游戏:

 

#include<stdio.h>
#include<time.h>
int main()
{
    int m,i,n=0,s=0;
    srand(time(NULL));
    printf("请输入要掷骰子的次数:");
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        n=rand()%6+1;//生成骰子的六位随机面
        printf("第%d次骰子的点数为:%d\n",i,n);
        s=s+n;
    }
    printf("你一共郑了%d次骰子!\n",m);
    printf("骰子的总点数为:%d",s);
    return 0;
}

 

猜数游戏:

 

 

 1 //生成100以内的随机数
 2 #include<stdio.h>//包含生成随机数的函数
 3 #include<time.h>
 4 int main()
 5 {
 6     int m,n,i=0;//i在此要先赋初值0
 7     srand(time(NULL));
 8     n=rand()%100+1;//rand生成的随机数可达65000多,这里除以100
 9     do{
10         printf("请输入所猜数字:");
11         scanf("%d",&m);
12         i++;
13         if(m>n)
14             printf("你猜的数太大了!\n");
15         else if(m<n)
16             printf("你猜的数太小了!\n");
17     }while(m!=n);
18     printf("你一共猜了%d次,",i);
19     if(i<=5)
20         printf("你很聪明!");
21     else
22         printf("你还要多努力!");
23     return 0;
24 }

 

 

 

 

 

 

 

  

 

模拟算法_掷骰子游戏&&猜数游戏

标签:

原文地址:http://www.cnblogs.com/nvliumang/p/5313201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!