铁岭市网站建设公司,浏览器大全列表下载,wap网站开发多少钱,wordpress评论不审核跟着哔站的视频复习一遍基础知识#xff0c;根据老师的思路写双色球项目。相较老师的程序加入了一些功能。没有用到模板知识#xff0c;欢迎交流。
1、6个红球1个蓝球#xff0c;红球号码1-33#xff0c;号码不重复#xff1b;篮球号码1-15.
2、自选号码功能#xff1a…跟着哔站的视频复习一遍基础知识根据老师的思路写双色球项目。相较老师的程序加入了一些功能。没有用到模板知识欢迎交流。
1、6个红球1个蓝球红球号码1-33号码不重复篮球号码1-15.
2、自选号码功能要甄别号码是否重复用了一个数组标记号码是否已出现越界或者重复情况清空缓冲区内容重新输入。掌握了cin.fail()、cin.clear()、cin.ignore(numeric_limitsstreamsize::max(),\n)几个知识点。每次和用户交互后都要注意缓冲区遗留内容会影响后续输入的可能性。
3、机选号码功能同样要甄别号码是否重复使用数组存放号码源获得随机下标后取号码将剩余的号码复制到新数组中更新号码源。
4、加入了延时开奖功能和倒计时功能引入了thread中this_thread命名空间下sleep_for()休眠函数chrono头文件对于时间处理更加便捷。chrono::seconds(1)表示1秒。
5、打印函数中利用sstream头文件中的ostringstream类创建字符串流将数组中的内容加入字符串并利用iomanip头文件来控制输出格式最后获取ostringstream::str()字符串。
上代码
#includeiostream
using namespace std;
#includePlayGame.h
#includectime
#includerandom
int main() {srand((unsigned int)time(NULL));playgame();return 0;
}
#pragma once
#define COUNTBALL 7
#define REDBALLRANGE 33
#define BLUEBALLRANGE 15void playgame(); //主程序函数
int GetNumber(); //读取数字的工具函数
int* GetOptionalNum(); //自选号码函数
int* GetRandomNum(); //机选号码函数
void printNumBall(int* numball,int len); //打印函数
int* GetWinNum(); //获得中奖号码
void Mysort(int* numball, int len); //排序函数
void BonusCaculation(int* numball, int len,int* WinNum); //开奖函数
#include PlayGame.h
#includeiostream
using namespace std;
#includesstream
#includeiomanip
#includethread
#includechrono
void playgame()
{int ExitFlag 0;while (!ExitFlag) {cout ********************* endl;cout 1.自选号码 endl;cout 2.机选号码 endl;cout 0.退出系统 endl;cout ********************* endl;int choice GetNumber();int* numball NULL;switch (choice) {case 0:ExitFlag 1;break;case 1:numball GetOptionalNum();break;case 2:numball GetRandomNum();break;default:break;}if (numball) {cout 你选的号码是\t;printNumBall(numball, COUNTBALL);cout 距离开奖还有5秒 endl;int sec 5;while (sec) {cout sec endl;this_thread::sleep_for(chrono::seconds(1));sec--;}cout 中奖号码是\t;int *WinNum GetWinNum();printNumBall(WinNum, COUNTBALL);BonusCaculation(numball, COUNTBALL, WinNum);}system(pause);system(cls);}
}
//数字读取函数
int GetNumber()
{int res -1;cin res;while (cin.fail()) {cin.clear();cin.ignore(1);cin res;}return res;
}
//用户输入自选号
int * GetOptionalNum()
{int* numball new int[COUNTBALL]; //申请双色球数组存放用户自选号cout 请输入六个红球数字1~33 endl; int numflag[REDBALLRANGE1] { 0 }; //标记是否重复1表示已出现0表示未出现for (int i 0; i COUNTBALL-1; i) { //循环读取好吗前6个是红球numball[i] GetNumber();//判断号码是否出界和重复if ((numball[i] 1 numball[i] REDBALLRANGE numflag[numball[i]] 1) || numball[i] 1 || numball[i]REDBALLRANGE) {cout 红球输入不合法请重新输入: endl;cin.ignore(numeric_limitsstreamsize::max(),\n); //如果重复忽略掉后面所有输入直至回车i -1; //重置读取循环重新读取for (int elem : numflag) { //重置重复标志elem 0;}}else if (numball[i] 1 numball[i] REDBALLRANGE) { //不重复、不越界正常读取存放numflag[numball[i]] 1; //已存放的号码球重复标志设置为1}}cin.ignore(numeric_limitsstreamsize::max(), \n); //忽略掉缓冲区多余内容避免影响后续输入cout 请输入蓝球数字1~15;numball[6] GetNumber(); //读取蓝球号码while (!(numball[6] 1 numball[6] BLUEBALLRANGE)) {cout 蓝球输入不合法请重新输入;numball[6] GetNumber();}cin.ignore(numeric_limitsstreamsize::max(), \n);Mysort(numball, COUNTBALL - 1); //红球排序return numball;
}
//获得一组机选号
int * GetRandomNum()
{int* numball new int[COUNTBALL]; //申请双色球数组存放机选号int* numsource new int[REDBALLRANGE]; //申请一个数组存放号码源机选号从号码源读取for (int i 0; i REDBALLRANGE; i) { //初始化号码源 1-33numsource[i] i 1;}for (int i 0; i COUNTBALL - 1; i) { //生成6个红球随机号码int index rand() % (REDBALLRANGE - i); //生成号码源的随机下标numball[i] numsource[index]; //从号码源读取随机下标位置的号码int *temp new int[REDBALLRANGE - i - 1]; //申请一个新数组比号码源少一个元素for (int j 0,k 0; j REDBALLRANGE - i - 1; j,k) { //将号码源复制到新数组 if (k ! index) { temp[j] numsource[k];}else { //当复制到已读取过的元素跳过temp[j] numsource[k];}}delete numsource;numsource temp;}numball[6] rand() % BLUEBALLRANGE 1;Mysort(numball, COUNTBALL - 1); //红球排序return numball;
}
//打印双色球
void printNumBall(int * numball, int len)
{ostringstream oss;for (int i 0; i len; i) {oss setw(2) setfill(0) numball[i] ;}string str oss.str();cout str endl;
}int * GetWinNum()
{return GetRandomNum();
}
//从小到大排序
void Mysort(int * numball, int len)
{//选择排序//for (int i 0; i len - 1; i) {// int minindex i;// int j 0;// for (j i 1; j len; j) {// if (numball[j] numball[i]) {// minindex j;// }// }// if (minindex ! i) {// int temp numball[i];// numball[i] numball[minindex];// numball[minindex] temp;// }//}//冒泡排序for (int i 0; i len ; i) {for (int j 0; j len - 1 - i; j) {if (numball[j] numball[j 1]) {int temp numball[j];numball[j] numball[j 1];numball[j 1] temp;}}}
}
//--------------------------------------------
//|-------一等奖61-----------500000元-------|
//|-------二等奖6或者51------200000元-------|
//|-------三等奖5或者41------50000 元-------|
//|-------四等奖4或者31------5000 元-------|
//|-------五等奖3或者21------500 元-------|
//|-------六等奖2或者11------50 元-------|
//|-------七等奖1或者1--------5 元-------|
//|--------------------------------------------|
//
void BonusCaculation(int * numball, int len, int* WinNum)
{int cnt 0, blue 0, res 0;for (int i 0; i len - 1; i) {if (numball[i] WinNum[i]) {cnt;}}if (numball[len - 1] WinNum[len - 1]) {blue 1;}int awards[7] { 500000,200000,50000,5000,500,50,5 };res cnt blue;if (res) {cout 恭喜你中 8 - res 等奖奖金 awards[7 - res] 元 endl;}else {cout 很遗憾你没有中奖 endl;}
}