写了个双色球模拟,花费¥5,000,000.00中了¥14,378,910.00,中奖次数:181438
程序代码:
static Random random = new Random(); private static void Main() { int choiceNumber = 1; for (; choiceNumber > 0 ; ) { Console.WriteLine("双色球投注模拟,功能1:单注选择 2:购买机选 0:退出"); Console.WriteLine("输入数字后回车,启动对应功能:"); choiceNumber = int.Parse(Console.ReadLine()); ChoiceFunction(choiceNumber); } } private static void Function02() { Console.WriteLine("输入要购买的注数:"); int buynumber = int.Parse(Console.ReadLine()); int prizeCount = 0, totalBonus = 0; int[] bonusNum = GenerateAGroupRandomNumber(); for (int i = 0; i < buynumber; i++ ) { int[] randomNumber = GenerateAGroupRandomNumber(); for(int j = 0; j< randomNumber.Length; j++) { Console.Write(randomNumber[j]+"\t"); } Console.Write("\n\r"); int level = OutputPrizeLevel(randomNumber, bonusNum); if (level > 0) { prizeCount++; totalBonus += BonusOfLevel(level); } } Console.WriteLine("花费{0:c}中了{1:c},中奖次数:{2}\n\r", buynumber * 2, totalBonus, prizeCount); } private static void Function01() { //输入一注 int[] buyNumber = InputNumber(); //生成奖号 int[] winNumber = GenerateAGroupRandomNumber(); //判断是否中奖 int level = OutputPrizeLevel(buyNumber, winNumber); //输出奖号 Console.Write("中奖号码是:"); for (int i = 0; i < 7; i++) Console.Write(winNumber[i] + ","); //输出结果 if (level <= 0) Console.WriteLine("下次就能中了."); else { //判断奖金 int bonus = BonusOfLevel(level); Console.WriteLine("恭喜!中了{0}等奖,奖金:{1}.", level, bonus); } Console.WriteLine("-------------- "); } /// <summary> /// 功能选择 /// </summary> /// <param name="choiceNumber">编号</param> private static void ChoiceFunction(int choiceNumber) { if (choiceNumber == 1) Function01(); if (choiceNumber == 2) Function02(); } /// <summary> /// 判断并返回中奖等级 /// </summary> /// <param name="buy">判断对象</param> /// <param name="winning">中奖号码</param> /// <returns></returns> private static int OutputPrizeLevel(int[] buy, int[] winning) { int redCount = 0, blueCount = 0;//分别计数 for (int i = 0; i < 7; i++) //七位循环 { if (i < 7 - 1)//红球比对 { int[] array = new int[6]; Array.Copy(winning, array, 6);//复制前六位 //检查是否有中奖号码 if (Array.IndexOf(winning, buy[i]) >= 0) redCount += 1; // Console.WriteLine("输出次数测试{0}", array[i]); } else //蓝球比对 { if (winning[i] == buy[i]) blueCount += 1; // Console.WriteLine("输出次数测试{0}", i); } } int level = ResultLevelIs(redCount, blueCount);//中奖等级 return level; } /// <summary> /// 红蓝球比对 /// </summary> /// <param name="readCount">红</param> /// <param name="blueCount">蓝</param> /// <returns></returns> private static int ResultLevelIs(int readCount ,int blueCount) { if (readCount == 0 && blueCount == 0) return 0; else { if (readCount == 6 && blueCount == 1) return 1; else if (readCount == 6 && blueCount == 0) return 2; else if (readCount == 5 && blueCount == 1) return 3; else if (readCount == 5 && blueCount == 0) return 4; else if (readCount == 4 && blueCount == 1) return 4; else if (readCount == 4 && blueCount == 0) return 5; else if (readCount == 3 && blueCount == 1) return 5; else if (blueCount == 1) return 6; else return -1; } } /// <summary> /// 根据等级判断奖金 /// </summary> /// <param name="level">中奖等级</param> /// <returns></returns> private static int BonusOfLevel(int level) { switch(level) { case 1: return 5000000; case 2: return 1250000; case 3: return 3000; case 4: return 200; case 5: return 10; case 6: return 5; default: return 0; } } /// <summary> /// 生成7位的随机数组 /// </summary> /// <returns></returns> private static int[] GenerateAGroupRandomNumber() { int[] number = new int[7]; for (int i = 0; i < 7; i++) { int randomNum = 0; if (i < 7 - 1)//前六位 { do { randomNum = random.Next(1, 33 + 1); } while (Array.IndexOf(number, randomNum) >= 0); //判断是否重复 number[i] = randomNum; } else//第七位 { number[i] = 99;//先将第七位赋值,方便排序 Array.Sort(number); number[i] = random.Next(1, 16 + 1); } } return number; } /// <summary> /// 录入选择号码 /// </summary> /// <returns></returns> private static int[] InputNumber() { int[] buyNum = new int[7]; for (int i = 0; i < 7; i++)//提示输入 { Console.WriteLine("第{0}个{1}球是: ", i + 1, (i == 6) ? "蓝" : "红"); buyNum[i] = int.Parse(Console.ReadLine()); if (i != 7 - 1)//判断前六位是否正确 { bool numberRepetition = false; while (buyNum[i] > 33 || buyNum[i] < 1 || numberRepetition) { buyNum[i] = InputError(); numberRepetition = Array.IndexOf(buyNum, buyNum[i]) >= 0; } } else//第七位判断 { while (buyNum[i] > 16 || buyNum[i] < 1) buyNum[i] = InputError(); } } return buyNum; } private static int InputError() { Console.WriteLine("输入有误,请重试!"); return int.Parse(Console.ReadLine()); }第一次写200行代码,用的是C#语言,单注的功能没有发现问题,多注自动机选似乎中的太多了。。。
请老哥们看下,真没错的话我要去买彩票了。。。
[此贴子已经被作者于2019-7-10 16:17编辑过]