具体彩票信息详见:http://caipiao.taobao.com/lottery/order/lottery_dj.htm
大傻曾在一个星期内赚了5000多,当时很羡慕。我劝他见好就收,他还是坚持,可惜好景不常,最后把赚了的都亏了,还倒贴了许多。
暑假闲来无事,仔细的看了一下十一运夺金,感觉这个比那个大乐透更可靠。刚开始研究了伪随机数的产生,后来开始研究彩票选号策略。很小的时候就YY过,研究出彩票中的数学规律,然后-----口水直流。曾在看到过某国的某个天才即然可以算出某些类型彩票的中奖号码。
即然试图探索彩票中的奥秘,那么必须进行实验。如果是在实际中进行实验,我相信我还没找到规律我就已经破产了,所以必须想个其它的法子。刚好我会编程,用visual C++6.0做了一个十一运夺金的模拟系统,首先得说下工作原理,本程序事实是彩票的“重演”,通过记录已有的所有彩票数据,将他们以文件的形式输入到程序中,自己通过将制定的选号策略编成函数,通过历史数据进行检验,这样就相当于在现实中购买了彩票。
如果能研究出规律固然好,否则就当复习C+概论+统计+随机数的产生。
收集数据真是一个体力活,程序还只有7.6日的数据
以下是代码:
#include<iostream> #include<ctime> using namespace std; //freeze 2011-7-8 typedef struct Ticket { long N;//期数 short A;//第一个数 short B;//第二个数 short C;//第三个数 short D;//第四个数 short E;//第五个数 }Ticket;//定义彩票结构体 typedef struct Choice //不同玩法需更改 { //此处选择 前一直选玩法 使用胆拖选二个号码,猜中开奖号码的第一个数字 int n1; int n2; }Choice; void toString(char a[],int b);//将月份与日期转化为字符串格式,便于拼接 void myMethod(Ticket ticket[],int i,Choice * mychoice);//选号方法 void caculateMoney(Ticket ticket[],int i,Choice mychoice,int *money);//计算本次收益 int main() { FILE *fp=NULL;//fp用于打开彩票数据 Ticket ticket[66];//用于存储一天内的所有彩票 Choice mychoice; int month,day,i,money=0;//month是月,day是日,i用于循环期数,money为钱 char flag; char m[3],d[3]; char file[9]; while (1) { cout<<"输入日期以获取数据,月:"; cin>>month; cout<<"日:"; cin>>day; cout<<"是否确定(y/n):"; getchar(); if ((flag=getchar())=='y') { break; } } toString(m,month); toString(d,day); strcpy(file,m); strcat(file,d); strcat(file,".txt"); if ((fp=fopen(file,"r"))==NULL) { cout<<"打开彩票数据文件失败!"<<endl; exit(1); } for (i=1;i<=65;i++) { fscanf(fp,"%d %d %d %d %d %d",&(ticket[i].N),&(ticket[i].A),&(ticket[i].B),&(ticket[i].C),&(ticket[i].D),&(ticket[i].E)); cout<<month<<"月"<<day<<"日第"<<i<<"期:"; printf("%3d,%3d,%3d,%3d,%3d\n",ticket[i].A,ticket[i].B,ticket[i].C,ticket[i].D,ticket[i].E); //不同玩法需更改 myMethod(ticket,i,&mychoice); cout<<"我的前一直选玩法:"<<mychoice.n1<<" "<<mychoice.n2<<endl<<endl; caculateMoney(ticket,i,mychoice,&money); } cout<<month<<"月"<<day<<"日您一共收益"<<money<<"元"<<endl; fclose(fp); return 0; } void toString(char a[3],int b) { a[0]=b/10+48; a[1]=b%10+48; a[2]='\0'; } void myMethod(Ticket ticket[],int i,Choice * mychoice)//不同玩法需更改 { srand(time(NULL)); int temp=0; if(i<=2)//头两次区别对待 { while (temp==0) { temp=rand()%12; mychoice->n1=temp; } temp=0; if (i==2) mychoice->n2=ticket[i-1].A; else while (temp==0||temp==mychoice->n1) { temp=rand()%12; mychoice->n2=temp; } } if (i>2)//一个号与前一次相同,还有一个号选前两个相加与11求与 { mychoice->n1=ticket[i-1].A; temp=(ticket[i-1].A+ticket[i-2].A)%12; if (temp==0) mychoice->n2=1; else mychoice->n2=temp; } } void caculateMoney(Ticket ticket[],int i,Choice mychoice,int *money)//不同玩法需更改 { *money=*money-4;//彩票成本两张4元 if (mychoice.n1==ticket[i].A||mychoice.n2==ticket[i].A) { *money=*money+13; } }