题目描述
(彩票共有七个号码,每个号码的区间为0-30)
输入购买彩票的组数n彩票购买者的名字name
随机生成n组福利彩票号码和摇奖后的中奖号码
将购买者所买的每组号码依次与中奖号码进行匹配:当从左至右各位置上的号码一一相同,则表示你中了一等奖;如果有5、6个相同则为二等奖;余下大于两个以上相同的号码均为三等奖,编程实现该游戏规则!
输入
2
Tom
输出
恭喜XXX中了(多少注)一等奖|(多少注)二等奖|(多少注)三等奖!
或者:
加油!继续!
#include <iostream>
#include <string>
#include <time.h>
#include <assert.h>
using namespace std;
int *generateRandomArray(int n,int rangeL,int rangeR){
//如果expression为false,在stderr上打印一条包含“表达式,文件名,行号”的错误信息,然后调用abort结束整个程序
assert(rangeL<=rangeR);
int *arr = new int[n];
//time_t time(time_t *t)返回自Unix时间纪元(1970.01.01/00:00:00)起的到当前时间的秒数,可以用一个指针接收
srand(time(NULL));//设置随机数产生器的初始值(种子值)
for(int i=0;i<n;i++)
//rand根据种子生成伪随机数,若种子不变生成的伪随机数序列也不变
arr[i]=rand()%(rangeR-rangeL+1)+rangeL;
return arr;
}
class Buyer{
public:
string name;
int sets;
int **lottery;
Buyer(string n,int s):name(n),sets(s){
lottery=new int *[sets];
for(int i=0;i<sets;i++){
//随机生成每一组彩票的号码
lottery[i]=generateRandomArray(7,0,30);
//设置生成每组彩票的时间间隔
if(i<sets-1){
int startT=clock();//程序一开始clock()就自动运行,每过1ms其返回值就+1
for(int endT=0;endT<1000;){//1s后退出循环
endT=clock();
endT=endT-startT;
}
}
}
};
~Buyer(){
for(int i=0;i<sets;i++)
delete [] lottery;
}
void print(int *result){
int first=0,second=0,third=0;
for(int i=0;i<sets;i++){
int same=0;
for(int j=0;j<7;j++){
if(lottery[i][j]==result[j])
same++;
}
if(same==7)
first++;
else if(same>4)
second++;
else if(same>1)
third++;
}
if(first==0&&second==0&&third==0)
cout<<"加油!继续!"<<endl;
else{
cout<<"恭喜"<<name<<"中了";
if(first!=0)
cout<<first<<"注一等奖";
if(second!=0)
cout<<second<<"注二等奖";
if(third!=0)
cout<<third<<"注三等奖";
cout<<"!"<<endl;
}
}
};
int main(){
int n;
string name;
cin>>n>>name;
int *result=generateRandomArray(7,0,30);
int startT=clock();
for(int endT=0;endT<1000;){
endT=clock();
endT=endT-startT;
}
Buyer buyer(name,n);
buyer.print(result);
return 0;
}