文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-12-09 18:00

关注

规则

“双色球”每注投注号码由 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;
  
}
 
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语言计算双色球中奖率内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网! 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯