首页
编程最新

分类

当前位置: 云海天教程网 > 技术新闻 > 编程最新 >正文

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

更新时间:2022-12-09  作者:佚名   来源: 网络转载

规则

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

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

编写思路

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

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

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

运行结果

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

源码

// 程序功能:双色球中奖率计算
// 编译环境: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("彩票中奖号码为:
");
  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("购买的彩票号码为:
");
    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次
", CS);
  printf("没中奖%d次
", ZERO);
  printf("一等奖%d次
", ONE);
  printf("二等奖%d次
", TWO);
  printf("三等奖%d次
", THREE);
  printf("四等奖%d次
", FOUR);
  printf("五等奖%d次
", FIVE);
  printf("六等奖%d次
", SIX);
  int outmoney = CS * 2;
  int inmoney = SIX * 5 + FIVE * 10 + FOUR * 200 + THREE * 3000 + TWO * 341021 + ONE * 10000000;
  printf("共耗资%d元,中奖%d元,亏损%d元
", 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("红色球为
");
  for (int i = 0; i < 33; i++)
  {
    if (red[i].IS_CHOSE)
    {
      printf("%d	", red[i].number);
    }
  }
  printf("
");
  printf("蓝色号为:
");
  for (int i = 0; i < 16; i++)
  {
    if (blue[i].IS_CHOSE)
    {
      printf("%d	
", 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	蓝色中%d
",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语言计算双色球中奖率内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程! 

上一篇:数据安全新战场,EasyMR为企业筑起“安全防线” 下一篇:C++ Boost Assign超详细讲解【C++教程】
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

云海天教程网 版权所有

 陕公网安备 61050202000585号

陕ICP备14013131号-3