//33选7彩票程序
//by lecky.lee
//2006-2-16
#include<iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<vector>
#include<algorithm>
using namespace std;
int obj[7];
int select[7];
vector<int> bingo,b1;
vector<int>::iterator it;
int rnd(int s[7],vector<int> &b)
{
int i,j;
for( i = 0;i < 7;i++ )
{
s[i]=rand()%33+1;//取1-33的随机数
}
for(i=0;i<7;i++)
{
for(j=i+1;j<7;j++)
{
if (s[i]==s[j]) //判断产生的随机数是否有重复
return 1;//如发生重复返回1
}
}
for(i=0;i<7;i++)
b.push_back (s[i]); //进栈
sort(b.begin (),b.end());//对产生随机数排序
return 0;
}
int trap()//用于手选号码的错误判定
{
for(int i=0;i<7;i++)
{
for(int j=i+1;j<7;j++)
{
if (b1[i]==b1[j])//判定是否有重复
return 1;
}
if((b1[i]<1)||(b1[i]>33))//判定是否超出数据范围
return 1;
}
return 0;
}
int hand()//手选号码
{
for(int i=0;i<7;i++)
{
cout << "请输入第" << i+1 << "个号码:";
cin >> select[i];
b1.push_back(select[i]);
cout << endl;
}
if (trap()==1)
{
cout << "您输的号码有重复或超出了1-33的范围,请重新输入." << endl;
b1.clear ();//清空错误数据
hand();//递归,如号码出错重选
}
for (int i=0;i<7;i++)
{
cout << b1[i] << "/t";//号码正确则输出
}
cout << endl;
return 0;
}
int god()//机选号码
{
int a;
cout<< "您的机选号码是:..." <<endl;
do
{
a=rnd(select,b1);
if(a==0)
for(int i=0;i<b1.size();i++)
{
cout << b1[i] << "/t";
}
}
while(a==1);//错误控制
cout << endl;
return 0;
}
int lucky()//产生中奖号码
{
int b;
cout<< "中奖号码是:..." <<endl;
do
{
b=rnd(obj,bingo);
if(b==0)
for(int i=0;i<bingo.size();i++)
{
cout << bingo[i] << "/t";
}
}
while(b==1);
return 0;
}
int check()//检查中奖情况
{
int count=0;//猜中号码个数
for(int i=0;i<7;i++)
{
it=find(bingo.begin(),bingo.end(),b1[i]);
if(it!=bingo.end())
{
count++;
}
}
return count;
}
int result(int p)//概率统计
{
int c[8]={0,0,0,0,0,0,0,0};
int yun;
lucky();
for(int k=0;k<p;k++)
{
god();
c[check()]++;//将猜中每个号码个数的次数存入该数组相应的下标元素
b1.clear ();
}
cout << endl << "在上述测试中:" << endl;
for(int j=0;j<8;j++)
{
yun=c[j]*100/p;
cout << "猜中" << j << "个号码的次数为" << c[j] << "次" << endl;
cout << "猜中" << j << "个号码的概率为" << yun << "%" << endl;
}
bingo.clear ();
return 0;
}
int main()
{
char l;
int t=0;
srand( (unsigned)time( NULL ) );//随机种子
do
{
cout << "33选7彩票程序 " << "by " << "lecky.lee" << endl;
cout << "[1]手选号码" << endl;
cout << "[2]机选号码" << endl;
cout << "[3]概率统计" << endl;
cout << "[4]退出" << endl;
cout << "请输入您的选择[1-3]";
cin >> l;
switch(l)
{
case '1':
hand();
lucky();
cout << endl << "您猜中了【" << check() << "】个号码" << endl;
bingo.clear ();
b1.clear ();
break;
case '2':
god();
lucky();
cout << endl << "您猜中了【" << check() << "】个号码" << endl;
bingo.clear ();
b1.clear ();
break;
case '3':
cout << "请输入测试的次数:";
cin >> t;
result(t);
break;
case '4':
cout << "十赌九输啊!快走吧,再晚了就改不上2路汽车了..." << endl;
break;
default:
cout << "请输入1-3之间的数字" << endl;
}
}
while(l!='4');
return 0;
}
//by lecky.lee
//2006-2-16
#include<iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<vector>
#include<algorithm>
using namespace std;
int obj[7];
int select[7];
vector<int> bingo,b1;
vector<int>::iterator it;
int rnd(int s[7],vector<int> &b)
{
int i,j;
for( i = 0;i < 7;i++ )
{
s[i]=rand()%33+1;//取1-33的随机数
}
for(i=0;i<7;i++)
{
for(j=i+1;j<7;j++)
{
if (s[i]==s[j]) //判断产生的随机数是否有重复
return 1;//如发生重复返回1
}
}
for(i=0;i<7;i++)
b.push_back (s[i]); //进栈
sort(b.begin (),b.end());//对产生随机数排序
return 0;
}
int trap()//用于手选号码的错误判定
{
for(int i=0;i<7;i++)
{
for(int j=i+1;j<7;j++)
{
if (b1[i]==b1[j])//判定是否有重复
return 1;
}
if((b1[i]<1)||(b1[i]>33))//判定是否超出数据范围
return 1;
}
return 0;
}
int hand()//手选号码
{
for(int i=0;i<7;i++)
{
cout << "请输入第" << i+1 << "个号码:";
cin >> select[i];
b1.push_back(select[i]);
cout << endl;
}
if (trap()==1)
{
cout << "您输的号码有重复或超出了1-33的范围,请重新输入." << endl;
b1.clear ();//清空错误数据
hand();//递归,如号码出错重选
}
for (int i=0;i<7;i++)
{
cout << b1[i] << "/t";//号码正确则输出
}
cout << endl;
return 0;
}
int god()//机选号码
{
int a;
cout<< "您的机选号码是:..." <<endl;
do
{
a=rnd(select,b1);
if(a==0)
for(int i=0;i<b1.size();i++)
{
cout << b1[i] << "/t";
}
}
while(a==1);//错误控制
cout << endl;
return 0;
}
int lucky()//产生中奖号码
{
int b;
cout<< "中奖号码是:..." <<endl;
do
{
b=rnd(obj,bingo);
if(b==0)
for(int i=0;i<bingo.size();i++)
{
cout << bingo[i] << "/t";
}
}
while(b==1);
return 0;
}
int check()//检查中奖情况
{
int count=0;//猜中号码个数
for(int i=0;i<7;i++)
{
it=find(bingo.begin(),bingo.end(),b1[i]);
if(it!=bingo.end())
{
count++;
}
}
return count;
}
int result(int p)//概率统计
{
int c[8]={0,0,0,0,0,0,0,0};
int yun;
lucky();
for(int k=0;k<p;k++)
{
god();
c[check()]++;//将猜中每个号码个数的次数存入该数组相应的下标元素
b1.clear ();
}
cout << endl << "在上述测试中:" << endl;
for(int j=0;j<8;j++)
{
yun=c[j]*100/p;
cout << "猜中" << j << "个号码的次数为" << c[j] << "次" << endl;
cout << "猜中" << j << "个号码的概率为" << yun << "%" << endl;
}
bingo.clear ();
return 0;
}
int main()
{
char l;
int t=0;
srand( (unsigned)time( NULL ) );//随机种子
do
{
cout << "33选7彩票程序 " << "by " << "lecky.lee" << endl;
cout << "[1]手选号码" << endl;
cout << "[2]机选号码" << endl;
cout << "[3]概率统计" << endl;
cout << "[4]退出" << endl;
cout << "请输入您的选择[1-3]";
cin >> l;
switch(l)
{
case '1':
hand();
lucky();
cout << endl << "您猜中了【" << check() << "】个号码" << endl;
bingo.clear ();
b1.clear ();
break;
case '2':
god();
lucky();
cout << endl << "您猜中了【" << check() << "】个号码" << endl;
bingo.clear ();
b1.clear ();
break;
case '3':
cout << "请输入测试的次数:";
cin >> t;
result(t);
break;
case '4':
cout << "十赌九输啊!快走吧,再晚了就改不上2路汽车了..." << endl;
break;
default:
cout << "请输入1-3之间的数字" << endl;
}
}
while(l!='4');
return 0;
}