1、彩票的规则
根据购买的彩票进行兑奖,彩票每注通常为一串7个数字(可以一注也可以五注,且数字可以机选也可以自定义),其中前五个为红球,后两个为蓝球。每期会出现一串7个数字,根据不同区对应重复多少个对应几等奖(下图就是超级大乐透的中奖规则)。
2、为何会想写这个程代码
为何会想要尝试写一个兑奖的程序呢,因为本人嫌买彩票麻烦,所以每次正常都是机选两三期,导致自己在每次线上兑奖时重复圈同一张彩票,第二第三次会比较难受,而且每次都得盯着一串数字,寻找重复了几个红球(前五个数)几个蓝球(后两个数)。虽然一开始觉得挺有趣,但后来为了方便,我就想写一个程序,只要输入你买的彩票的每一注号码和中奖的号码,就可以确定每一注的中奖情况。
3、C++实现
构建彩票父类
//彩票父类(需要重写规则和奖金)
class Lottery
{
public:
virtual int Rule() = 0;
virtual void Bonus(int a) = 0;
void DuiJiang(){
Bonus(Rule());
}
};
Rule()返回int的中奖等级,输入给Bonus函数公布奖金。
子类Chaos继承父类Lottery,并重写Rule()和Bonus函数
//超级大乐透
class Chao : public Lottery
{
public:
Chao(int *Num,int *num){
M_number = Num;
m_number = num;
}
int Rule() {
//初始化中奖等级
int Rank = -1;
//看命中多少个红球和蓝球
int *Count = new int [2]{0,0};
//前五个为红球
int Location = 5;
//前五个
for (int i = 0; i < Location; i++){
for(int k = 0; k < Location; k++){
if(M_number[i] == m_number[k]){
Count[0]++;
}
}
}
//后两个
for (int i = Location; i < 7; i++){
for(int k = Location; k < 7; k++){
if(M_number[i] == m_number[k]){
Count[1]++;
}
}
}
//中奖规则
if(Count[0] == 5 && Count[1] == 2){
Rank = 1;
}
else if(Count[0] == 5 && Count[1] == 1){
Rank = 2;
}
else if(Count[0] == 5 && Count[1] == 0){
Rank = 3;
}
else if(Count[0] == 4 && Count[1] == 2){
Rank = 4;
}
else if(Count[0] == 4 && Count[1] == 1){
Rank = 5;
}
else if(Count[0] == 3 && Count[1] == 2){
Rank = 6;
}
else if(Count[0] == 4 && Count[1] == 0){
Rank = 7;
}
else if((Count[0] == 2 && Count[1] == 2) || (Count[0] == 3 && Count[1] == 1)){
Rank = 8;
}
else if((Count[0] == 1 && Count[1] == 2) ||
(Count[0] == 3 && Count[1] == 0) ||
(Count[0] == 2 && Count[1] == 1) ||
(Count[0] == 0 && Count[1] == 2) ){
Rank = 9;
}
cout << "现在开始兑奖!" << endl;
return Rank;
}
void Bonus(int rank) {
//奖金设置
int bonus_1 = 7180775;
int bonus_2 = 5744620;
int bonus_3 = 10000;
int bonus_4 = 3000;
int bonus_5 = 300;
int bonus_6 = 200;
int bonus_7 = 100;
int bonus_8 = 15;
int bonus_9 = 5;
//奖金输出
if (rank > 0 && rank <=9){
cout << "恭喜您,中了 "<< rank << " 等奖!" << endl;
if(rank == 1){
cout << rank << " 等奖奖金为 " << bonus_1 << " 元" << endl;
}
else if(rank == 2){
cout << rank << " 等奖奖金为 " << bonus_2 << " 元" << endl;
}
else if(rank == 3){
cout << rank << " 等奖奖金为 " << bonus_3 << " 元" << endl;
}
else if(rank == 4){
cout << rank << " 等奖奖金为 " << bonus_4 << " 元" << endl;
}
else if(rank == 5){
cout << rank << " 等奖奖金为 " << bonus_5 << " 元" << endl;
}
else if(rank == 6){
cout << rank << " 等奖奖金为 " << bonus_6 << " 元" << endl;
}
else if(rank == 7){
cout << rank << " 等奖奖金为 " << bonus_7 << " 元" << endl;
}
else if(rank == 8){
cout << rank << " 等奖奖金为 " << bonus_8 << " 元" << endl;
}
else if(rank == 9){
cout << rank << " 等奖奖金为 " << bonus_9 << " 元" << endl;
}
}
//未中奖提示
else{
cout << "很遗憾,您没有中奖! " << endl;
}
}
private:
int *m_number = new int [7];
int *M_number = new int [7];
};
DoWork 函数
void DoWork(Lottery* m_p1) {
m_p1->DuiJiang();
}
主要是创建一个父类指针,方便调用DuiJiang函数而已。
Test01()测试函数
void test01()
{
//中奖号码
int *Array = new int [7]{ 03,16,23,27,32,03,06};
//彩民号码
int *array1 = new int [7]{ 04,13,26,27,29,03,9};
int *array2 = new int [7]{ 03,05,11,16,26,07,8};
int *array3 = new int [7]{ 14,22,23,27,35,9,12};
int *array4 = new int [7]{ 10,17,18,19,23,01,14};
int *array5 = new int [7]{ 07,8,9,16,24,5,10};
cout << "第一注:" << endl;
Lottery* p1 = new Chao(Array,array1);
DoWork(p1);
cout << '\n' << "第二注:" <<endl;
Lottery* p2 = new Chao(Array,array2);
DoWork(p2);
cout << '\n' << "第三注:" <<endl;
Lottery* p3 = new Chao(Array,array3);
DoWork(p3);
cout << '\n' << "第四注:" <<endl;
Lottery* p4 = new Chao(Array,array4);
DoWork(p4);
cout << '\n' << "第五注:" <<endl;
Lottery* p5 = new Chao(Array,array5);
DoWork(p5);
cout << "------- 祝您生活愉快! -------" << endl;
}
Array 为中奖的号码,连买多期的话,只需输入一次array1,...array5,然后根据每期中奖号码的不同更改Array内的值即可。(上面数字只是为了测试随机挑选,值得注意的是,C++语言中并不能识别08,09这两个数,会不知道你是几进制,所以正常输入8,9就没事)。
相对比连买三期手动网上兑奖,此程序只需输入一次购买的号码,每次更改中奖号码,运行即可知道是否中奖。方便了许多!
若你买的是只有一注的话,可以注释掉后面四个创建出来的数组和对象,并将对应输出也进行相应的注释设置。
main()函数
int main(){
test01();
return 0;
}
4、运行
下载附件后,在其caipiao的目录下打开vscode,里面已有配置好的环境和设置。
然后执行以下命令
//进入目录下的终端
ctrl + shift + ~
//进入build
cd build/
//编译和运行
cmake ..
make
./code
终端执行的的结果
附件: