C語(yǔ)言實(shí)現(xiàn)計(jì)算雙色球的中獎(jiǎng)率
規(guī)則
“雙色球”每注投注號(hào)碼由 6 個(gè)紅色球號(hào)碼和 1 個(gè)藍(lán)色球號(hào)碼組成。紅色球號(hào)碼從 1--33 中選擇;藍(lán)色球號(hào)碼從 1--16 中選擇。“雙色球”每注 2 元??偠灾?,就是從 1-33 個(gè)數(shù)中選擇 6 個(gè)數(shù),再?gòu)?1-16 個(gè)數(shù)中選擇 1 個(gè)數(shù)。中獎(jiǎng)的條件如下:
編寫(xiě)思路
編寫(xiě)該程序我使用了結(jié)構(gòu)體數(shù)組。如果這個(gè)號(hào)碼被選中,就會(huì)被標(biāo)記,下次就不會(huì)選擇。選擇我使用了隨機(jī)數(shù)生成,并且隨機(jī)種子使用了毫秒級(jí)別,防止短時(shí)間內(nèi)產(chǎn)生兩相同的數(shù)。
首先生成一組雙色球中獎(jiǎng)號(hào)碼。然后用循環(huán)隨機(jī)生成 N 組購(gòu)買號(hào)碼,使用購(gòu)買號(hào)碼與中獎(jiǎng)號(hào)碼進(jìn)行對(duì)比來(lái)確定是否中獎(jiǎng),以及中獎(jiǎng)等級(jí),然后計(jì)算中獎(jiǎng)金額,將中獎(jiǎng)的總次數(shù)除以購(gòu)買的次數(shù),就可以計(jì)算出中獎(jiǎng)率,如果次數(shù)不夠,計(jì)算出來(lái)的就不準(zhǔn)確,我使用 1000000 次,可以模擬出中獎(jiǎng)率在 6.7% 左右。但是中一等獎(jiǎng)的概率是幾乎沒(méi)有。
感興趣的同學(xué)可以將多試幾次看能否出現(xiàn)一等獎(jiǎng)。
運(yùn)行結(jié)果
源碼
// 程序功能:雙色球中獎(jiǎng)率計(jì)算 // 編譯環(huán)境:VS2013 // 結(jié) 論:中獎(jiǎng)率為 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("彩票中獎(jiǎng)號(hào)碼為:\n"); RED red[33]; BLUE blue[16]; initBALL(red, blue); printfZJ(red, blue); int CS = 1000000; // 購(gòu)買次數(shù) 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("購(gòu)買的彩票號(hào)碼為:\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("沒(méi)中獎(jiǎng)%d次\n", ZERO); printf("一等獎(jiǎng)%d次\n", ONE); printf("二等獎(jiǎng)%d次\n", TWO); printf("三等獎(jiǎng)%d次\n", THREE); printf("四等獎(jiǎng)%d次\n", FOUR); printf("五等獎(jiǎng)%d次\n", FIVE); printf("六等獎(jiǎng)%d次\n", SIX); int outmoney = CS * 2; int inmoney = SIX * 5 + FIVE * 10 + FOUR * 200 + THREE * 3000 + TWO * 341021 + ONE * 10000000; printf("共耗資%d元,中獎(jiǎng)%d元,虧損%d元\n", outmoney, inmoney, outmoney - inmoney); int ZJ = CS - ZERO; double ZJL = (ZJ*1.0) / CS * 100; printf("中獎(jiǎng)率為:%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("紅色球?yàn)閈n"); for (int i = 0; i < 33; i++) { if (red[i].IS_CHOSE) { printf("%d\t", red[i].number); } } printf("\n"); printf("藍(lán)色號(hào)為:\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藍(lán)色中%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; }
到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)計(jì)算雙色球的中獎(jiǎng)率的文章就介紹到這了,更多相關(guān)C語(yǔ)言計(jì)算雙色球中獎(jiǎng)率內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)程序開(kāi)機(jī)自啟動(dòng)
本文給大家分享的是一則C語(yǔ)言實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)的代碼,主要是通過(guò)C來(lái)獲取程序路徑修改注冊(cè)表項(xiàng)來(lái)實(shí)現(xiàn),有需要的小伙伴可以參考下2016-01-01從頭學(xué)習(xí)C語(yǔ)言之for語(yǔ)句和循環(huán)嵌套
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言之for語(yǔ)句和循環(huán)嵌套,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01C語(yǔ)言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建
這篇文章主要介紹了C語(yǔ)言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07解析sizeof, strlen, 指針以及數(shù)組作為函數(shù)參數(shù)的應(yīng)用
本篇文章是對(duì)sizeof, strlen, 指針以及數(shù)組作為函數(shù)參數(shù)的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言超詳細(xì)講解循環(huán)與分支語(yǔ)句基礎(chǔ)
各位小伙伴們,今天給大家?guī)?lái)的是循環(huán)與分支語(yǔ)句,本篇將會(huì)向大家介紹這些語(yǔ)句的格式和使用的基本方法,感興趣的朋友來(lái)看看吧2022-04-04利用Matlab實(shí)現(xiàn)時(shí)域分析功能的示例詳解
利用MATLAB可以方便地進(jìn)行控制系統(tǒng)的時(shí)域分析。這篇文章主要通過(guò)簡(jiǎn)單的示例為大家介紹了Matlab進(jìn)行時(shí)域分析的具體操作,需要的可以參考一下2023-02-02C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07