C语言实现计算双色球的中奖率

目录
  • 规则
  • 编写思路
  • 运行结果
  • 源码

规则

“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码组成。红色球号码从 1--33 中选择;蓝色球号码从 1--16 中选择。“双色球”每注 2 元。总而言之,就是从 1-33 个数中选择 6 个数,再从 1-16 个数中选择 1 个数。中奖的条件如下:

编写思路

编写该程序我使用了结构体数组。如果这个号码被选中,就会被标记,下次就不会选择。选择我使用了随机数生成,并且随机种子使用了毫秒级别,防止短时间内产生两相同的数。

首先生成一组双色球中奖号码。然后用循环随机生成 N 组购买号码,使用购买号码与中奖号码进行对比来确定是否中奖,以及中奖等级,然后计算中奖金额,将中奖的总次数除以购买的次数,就可以计算出中奖率,如果次数不够,计算出来的就不准确,我使用 1000000 次,可以模拟出中奖率在 6.7% 左右。但是中一等奖的概率是几乎没有。

感兴趣的同学可以将多试几次看能否出现一等奖。

运行结果

源码

// 程序功能:双色球中奖率计算
// 编译环境:VS2013
// 结    论:中奖率为 6.7%

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<sys/timeb.h>

struct RED
{
  bool IS_CHOSE;
  int number;
};

struct BLUE
{
  bool IS_CHOSE;
  int number;
};

void initBALL(RED *red, BLUE *blue);
void printfZJ(RED *red, BLUE *blue);
int printfZT(RED *red, BLUE *blue, RED *myred, BLUE *myblue);

int main()
{
  struct timeb timeSeed;
  ftime(&timeSeed);
  srand(timeSeed.time * 1000 + timeSeed.millitm);
  printf("彩票中奖号码为:\n");
  RED red[33];
  BLUE blue[16];
  initBALL(red, blue);
  printfZJ(red, blue);
  int CS = 1000000;  // 购买次数
  int ZERO = 0;
  int ONE = 0;
  int TWO = 0;
  int THREE = 0;
  int FOUR = 0;
  int FIVE = 0;
  int SIX = 0;
  for (int i = 0; i < CS; i++)
  {
    //printf("购买的彩票号码为:\n");
    RED myred[33];
    BLUE myblue[16];
    initBALL(myred, myblue);
    //printfZJ(myred, myblue);
    int DJ = printfZT(red, blue, myred, myblue);
    switch (DJ)
    {
    case 0:ZERO++; break;
    case 1:ONE++; break;
    case 2:TWO++; break;
    case 3:THREE++; break;
    case 4:FOUR++; break;
    case 5:FIVE++; break;
    case 6:SIX++; break;
    }
  }

  printf("总共选择%d次\n", CS);
  printf("没中奖%d次\n", ZERO);
  printf("一等奖%d次\n", ONE);
  printf("二等奖%d次\n", TWO);
  printf("三等奖%d次\n", THREE);
  printf("四等奖%d次\n", FOUR);
  printf("五等奖%d次\n", FIVE);
  printf("六等奖%d次\n", SIX);
  int outmoney = CS * 2;
  int inmoney = SIX * 5 + FIVE * 10 + FOUR * 200 + THREE * 3000 + TWO * 341021 + ONE * 10000000;
  printf("共耗资%d元,中奖%d元,亏损%d元\n", outmoney, inmoney, outmoney - inmoney);
  int ZJ = CS - ZERO;
  double ZJL = (ZJ*1.0) / CS * 100;
  printf("中奖率为:%lf", ZJL);
  _getch();
  return 0;
}
void initBALL(RED *red, BLUE *blue)
{
  for (int i = 0; i < 33; i++)
  {
    red[i].IS_CHOSE = false;
    red[i].number = i + 1;
  }
  for (int i = 0; i < 16; i++)
  {
    blue[i].IS_CHOSE = false;
    blue[i].number = i + 1;
  }
  for (int i = 0; i < 6; i++)
  {
    while (true)
    {
      int NUM = rand() % 33 + 1;
      if (red[NUM - 1].IS_CHOSE)
      {
        continue;
      }
      else
      {
        red[NUM - 1].IS_CHOSE = true;
        red[NUM - 1].number = NUM;
        break;
      }
    }
  }
  int NUM = rand() % 16 + 1;
  blue[NUM - 1].IS_CHOSE = true;
  /*blue[NUM - 1].number=NUM;*/
}

void printfZJ(RED *red, BLUE *blue)
{
  printf("红色球为\n");
  for (int i = 0; i < 33; i++)
  {
    if (red[i].IS_CHOSE)
    {
      printf("%d\t", red[i].number);
    }
  }
  printf("\n");
  printf("蓝色号为:\n");
  for (int i = 0; i < 16; i++)
  {
    if (blue[i].IS_CHOSE)
    {
      printf("%d\t\n", blue[i].number);
    }
  }
}

int printfZT(RED *red, BLUE *blue, RED *myred, BLUE *myblue)
{
  int rednumber = 0;
  int bluenumber = 0;
  for (int i = 0; i < 33; i++)
  {
    if (red[i].IS_CHOSE)
    {
      for (int j = 0; j < 33; j++)
      {
        if (myred[j].IS_CHOSE)
        {
          if (red[i].number == myred[j].number)
          {
            rednumber++;
            break;
          }
        }
      }
    }
  }
  for (int i = 0; i < 16; i++)
  {
    if (blue[i].IS_CHOSE)
    {
      for (int j = 0; j < 16; j++)
      {
        if (myblue[j].IS_CHOSE)
        {
          if (blue[i].number == myblue[j].number)
          {
            bluenumber++;
            break;
          }
        }
      }
      break;
    }
  }
  //printf("红色中%d\t蓝色中%d\n",rednumber,bluenumber);
  int DJ = 0;
  if (rednumber == 6 && bluenumber == 1)
  {
    DJ = 1;
  }
  if (rednumber == 6 && bluenumber == 0)
  {
    DJ = 2;
  }
  if (rednumber == 5 && bluenumber == 1)
  {
    DJ = 3;
  }
  if (rednumber == 5 && bluenumber == 0)
  {
    DJ = 4;
  }
  if (rednumber == 4 && bluenumber == 1)
  {
    DJ = 4;
  }
  if (rednumber == 4 && bluenumber == 0)
  {
    DJ = 5;
  }
  if (rednumber == 3 && bluenumber == 1)
  {
    DJ = 5;
  }
  if ((rednumber == 2 && bluenumber == 1) || (rednumber == 1 && bluenumber == 1) || (rednumber == 0 && bluenumber == 1))
  {
    DJ = 6;
  }
  return DJ;
}

到此这篇关于C语言实现计算双色球的中奖率的文章就介绍到这了,更多相关C语言计算双色球中奖率内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用JavaScript中的lodash编写双色球效果

    具体代码如下所述: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible

  • Java双色球系统开发详解

    目录 总结 功能说明 1.1. 菜单页功能 package lotteryDemo1; import java.util.Scanner; public class Menu { public static void main(String[] args) { Scanner sc=new Scanner(System.in); o:while(true){ System.out.println("欢迎使用双色球系统,官方网站www.zhongbuliao.com"); System.

  • js实现双色球效果

    本文实例为大家分享了js实现双色球效果的具体代码,供大家参考,具体内容如下 效果展示: 源码展示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js实现双色球效果</title> <style> span{ font-size: 20px; } .a { color: red; } .b

  • 基于C#设计一个双色球选号工具

    目录 窗体展示 开始后展示 结束摇色展示 代码 导入的命名空间 初始化私有变量 页面初始化 开始按钮 数字更新 结束按钮 结果显示 窗体展示 开始后展示 结束摇色展示 代码 导入的命名空间 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

  • 易语言制作双色球随机选号工具的代码

    双色球随机选号代码 .版本 2 .程序集 窗口程序集1 .子程序 _随机选号按钮_被单击 .局部变量 z, 逻辑型 .局部变量 随机号 随机号 = 取随机数 (1, 33) .如果 (随机号 < 10) 红球编辑框1.内容 = "0" + 到文本 (随机号) .否则 红球编辑框1.内容 = 到文本 (随机号) z = 假 .如果结束 .循环判断首 () 随机号 = 取随机数 (1, 33) .如果 (随机号 = 到数值 (红球编辑框1.内容)) z = 真 .否则 .如果 (随机

  • Python实现双色球号码随机生成

    目录 1. 随机一注 2. 红球固定或蓝球固定 红球固定 蓝球固定 3. 爬取中奖号码 4. 是否中奖 5. 总结一下 大家好,我是煎蛋哥! 上篇文章聊到了 Python 实现大乐透彩票自由的完整流程 如何使用 Python 实现彩票自由(大乐透) 和体彩大乐透类似,福彩双色球也是购买次数最多的彩种之一,相比大乐透,双色球更容易中小奖 下面将介绍 Python 实习双色球彩票自由的流程 1. 随机一注 福彩双色球一注同样包含 7 个数字,包含 6 个红球和 1 个篮球 其中 红球是从 1 - 3

  • C语言实现计算双色球的中奖率

    目录 规则 编写思路 运行结果 源码 规则 “双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码组成.红色球号码从 1--33 中选择:蓝色球号码从 1--16 中选择.“双色球”每注 2 元.总而言之,就是从 1-33 个数中选择 6 个数,再从 1-16 个数中选择 1 个数.中奖的条件如下: 编写思路 编写该程序我使用了结构体数组.如果这个号码被选中,就会被标记,下次就不会选择.选择我使用了随机数生成,并且随机种子使用了毫秒级别,防止短时间内产生两相同的数. 首先生成一组双色球中

  • C语言中计算二叉树的宽度的两种方式

    C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth(BinaryTree pointer){ int width[10];//加入这棵树的最大高度不超过10 int maxWidth=0; int floor=1; if(pointer){ if(floor==1){//如果访问的是根节点的话,第一层节点++; width[floor]++; flo

  • C#实现简单的双色球抽取中奖号码代码

    废话不多说,直接给大家贴代码,我我就是这么狠... 关键代码如下所示: int[] ss = new int[6]; Random s = new Random(); Console.WriteLine("双色球随机:"); for (int i = 0; i < 6; i++) { bool b = true; int a = s.Next(1, 34); for (int j = 0; j < i; j++) { if (a == ss[j]) { b = false;

  • C语言实现计算树的深度的方法

    本文实例讲述了C语言实现计算树的深度的方法.是算法设计中常用的技巧.分享给大家供大家参考.具体方法如下: /* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream> using namespace std; struct Node { Node(int i = 0, Node *l = NULL, Node *r = NULL) : data(i), left(l), right(r) {}

  • R语言科学计算RcppArmadillo简明手册

    目录 1. 常用数据类型 2. 数学运算 3. 向量.矩阵和域的创建 基本创建 用函数创建 4. 初始化,元素访问,属性和成员函数 4.1. 元素初始化 Element initialization 4.2. 元素访问 Element access 4.3. 子矩阵访问 Submatrix view 矩阵X的连续子集访问 向量V的连续子集访问 向量或矩阵X的间断子集访问 立方体(三维矩阵)Q 的切片 slice 域F的子集访问 4.4. 属性 Attribute 4.5. 其他成员函数 Othe

  • 基于C语言实现计算生辰八字五行的示例详解

    本文介绍生辰八字和八字五行的一种算法.站内有人在查询生辰八字的算法,此题本人也感兴趣.故以此文以续貂尾. 生辰八字计算要点是节气日,年柱以立春起,月柱以是月节气日起,故先要计算月首的节气日.本节气算法的节气时刻精度差些,但确定节气日是可以的.程序启动时先计算干支表和对应的五行表.具体的计算方法参阅程序的注释.算法很简单,一看就明白.要注意的是,八字的时柱先输出的是起时,生日时辰十二个时辰对应下面的起时表计算.程序列示文本打印输出和图片显示输出二种方法供参考. 本文主要介绍生辰八字的算法,没有计算

  • C语言中计算正弦的相关函数总结

    C语言sin()函数:正弦函数 头文件: #include <math.h> sin() 函数用来求给定值的正弦值,其原型为: double sin(double x); [参数]给定的值(弧度). [返回值]返回-1 至1 之间的计算结果. 弧度与角度的关系为: 弧度 = 180 / π 角度 角度 = π / 180 弧度 使用 rtod( ) 函数可以将弧度值转换为角度值. 注意,使用 GCC 编译时请加入-lm. 举例如下: #include <stdio.h> #incl

  • C语言中计算字符串长度与分割字符串的方法

    C语言strlen()函数:返回字符串的长度 头文件: #include <string.h> strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); [参数说明]s为指定的字符串. strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0". [返回值]返回字符串s 的字符数. 注意一下字符数组,例如 char str[100] = "http://see.xidian.edu.cn/cpp

  • 易语言制作计算软件简单步骤

    相对C++.C#等语言来说,易语言是比较容易学习的,很多做工程或者涉及到计算的工作,日常的计算经常要按计算器,还要看公式,显得极为不便,今天就来教大家怎么编写一个便捷的计算软件,来解决我们日常工作生活中常用的计算. 这样的专业计算软件不是一般的计算器,它的一部分数值是固定的,一部分需要自己手工输入,因此,有了这样的软件,我们日常查资料的时间就省去了,一步直接出计算结果. 1.打开易语言,点击新建→Windows窗口程序,按照图中的说明,点击右侧的功能按钮,然后在窗口上按住左键拖动,画出如图所示的

  • C语言编程计算信噪比SNR理解学习

    目录 概念 计算方法 相关认知 Taprint中的信噪比 实例 概念 这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化. 计算方法 信噪比的计量单位是dB,其计算方法是10lg(Ps/Pn),其中Ps和Pn分别代表信号与噪声的有效功率,也可以换算成电压幅值的比率关系:20Lg(Vs/Vn),Vs和Vn分别代表信号和噪声电压的"有效值". 在音频放大器中,我们希望

随机推荐