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

模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,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 }

  

时间: 2024-07-29 15:17:30

模拟算法_掷骰子游戏&&猜数游戏的相关文章

Java随机数的应用-猜数游戏

本人第一次接触Java,对于Java的认识还不够全面,现在只能利用Java的基础知识来做一个小小的编程游戏--猜数游戏! 游戏是这样的一个规则:设置一个1-100之间随机产生的秘密数值,然后输入一个你猜的数值,如果猜的数比秘密数值大,则用输入的数值代替比较大的数值的范围,如果猜的数比秘密数值小,则用输入的数值代替比较小的数值的范围,如此循环,直到猜的数等于秘密数值,才可以退出循环.此次游戏要用到循环结构语句和随机数的知识. import java.util.Random; import java

数组常见操作_猜数游戏

数组常见操作: 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数,并记录该数在数组中存在多少次 public class fortyNine { public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] sum = {10,20,21,34,65,76,6,87,98,20}; System.out.println("猜数游戏开始!"); System.out.

1536 不一样的猜数游戏

1536 不一样的猜数游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 瓦斯亚和皮台亚在玩一个简单的游戏.瓦斯亚心中想一个整数x,它是1到n之间的整数.然后皮台亚尝试着猜这个数字. 皮台亚每次问一个形如这样的问题:这个x是y的倍数吗? 这个游戏的流程是这样的:首先皮台亚把所有他想问的形如上述的问题都问出来(当然他也可以不问任何问题),然后瓦斯亚针对每一个问题给出yes或no的答案.最后皮台亚根据这些问题推断出瓦斯亚心中所想

python 课后习题 猜数游戏

4.1 猜数游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜数字,如果大于预设的数,显示“遗憾,太大了”:如果小于预设的数,显示“遗憾,太小了”:如此循环,直至猜到该数,显示“预测N次,你猜中了!”,其中N是用户输入数字的次数. secret = 4#print(secret)print('------猜数字游戏!-----')num = input('猜数字游戏开始,请输入数字0-9:')guess = int(num)N=1while guess != secret:     

简单猜数游戏2

/*简单猜数游戏,magic number#2,版本*/#include<stdio.h>#include<stdlib.h> int main(void){ int magic; /*magic number*/ int guess; /*user's guess*/ printf("\nWelcome to the magic number game\n"); magic=rand(); /*产生随机数*/ printf("\nGuess the

简单猜数游戏1

/*简单猜数游戏,magic number#1,版本*/#include<stdio.h>#include<stdlib.h> int main(void){ int magic; /*magic number*/ int guess; /*user's guess*/ printf("\nWelcome to the magic number game\n"); magic=rand(); /*产生随机数*/ printf("\nGuess the

OJ_1003.猜数游戏

1003. 猜数游戏 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 有一个"就是它"的猜数游戏,步骤如下:请你对任意输入的一个三位数x,在这三位数后重复一遍,得到一个六位数,467-->467467.把这个数连续除以7.11.13,输出最后的商. 输入 输入一个三位数x. 输出 输出最后的商. 样例输入 100 1 #include<stdio.h> 2 int main() 3 { 4 int a,b,c; 5

一个笨拙的猜数游戏代码参考

直接上代码!!! #include <stdio.h> #include <stdlib.h> #define TOP 1000 #define BOTTOM 0 /* 由Mr.Blue and Mr.Green制作于2016.7.31 21:17 本程序采用块状分段,使程序更加简单,但可读性降低,望见谅 */ int main(int argc, char * argv[]) { int toobig, toosmall, temp; char input; printf(&qu

猜数游戏-flag的运用

package my;import java.util.Scanner;public class MyJava {        public static void main(String[] args) {        // TODO Auto-generated method stub        @SuppressWarnings("resource")        Scanner input = new Scanner(System.in);