我的彩票梦-十一运夺金模拟程序

我的彩票梦-十一运夺金模拟程序_第1张图片大傻曾经玩过十一运夺金,这是一种合法的网络彩票。

具体彩票信息详见: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;
		}
	}

你可能感兴趣的:(模拟)