
#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 = 0i <7i++ )
{
s[i]=rand()%33+1//取1-33的随机数
}
for(i=0i<7i++)
{
for(j=i+1j<7j++)
{
if (s[i]==s[j]) //判断产生的随机数是否有重复
return 1//如发生重复返回1
}
}
for(i=0i<7i++)
b.push_back (s[i])//进栈
sort(b.begin (),b.end())//对产生随机数排序
return 0
}
int trap()//用于手选号码的错误判定
{
for(int i=0i<7i++)
{
for(int j=i+1j<7j++)
{
if (b1[i]==b1[j])//判定是否有重复
return 1
}
if((b1[i]<1)||(b1[i]>33))//判定是否超出数据范围
return 1
}
return 0
}
int hand()//手选号码
{
for(int i=0i<7i++)
{
cout<<"请输入第"<<i+1<<"个号码:"
cin>>select[i]
b1.push_back(select[i])
cout<<endl
}
if (trap()==1)
{
cout<<"您输的号码有重复或超出了1-33的范围,请重新输入."<<endl
b1.clear ()//清空错误数据
hand()//递归,如号码出错重选
}
for (i=0i<7i++)
{
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=0i<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=0i<bingo.size()i++)
{
cout<<bingo[i]<<"\t"
}
}
while(b==1)
return 0
}
int check()//检查中奖情况
{
int count=0//猜中号码个数
for(int i=0i<7i++)
{
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=0k<pk++)
{
god()
c[check()]++//将猜中每个号码个数的次数存入该数组相应的下标元素
b1.clear ()
}
cout<<endl<<"在上述测试中:"<<endl
for(int j=0j<8j++)
{
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<<"****************************************************"<<endl
cout<<"* 全民大彩票,惊喜多多,中奖多多,欢迎大家踊跃购买啦! *"<<endl
cout<<"* 压得多,赢得多,回家买辆大卡车!*"<<endl
cout<<"*开心刺激33选7,马上就要开始了,赶快押宝了 *"<<endl
cout<<"****************************************************"<<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
}
我以前用过的一个程序 你试试
Private Sub cmdStart_Click()Dim i As Integer‘定义i为整形变量
For i = 0 To 4’i从0 到 4 进行5次循环
If option1(i).Value Then‘如果选中了第i+1注(单选框第一到第五注是option1(0) 到option1(4))
Exit For’如果满足,退出for循环
End If‘结束判断
Next’for循环的结束语句
base = i * 7‘上面利用一个循环把你选中的第几注赋值给了i 此时把i*7赋值给变量basecmdStop.Enabled = True’把停职按钮的可用性变为true 即让停止按钮可用
cmdStart.Enabled = False‘让开始按钮不可用
cmdAuto.Enabled = False‘让自动按钮不可用
cmdStop.SetFocus’让停止按钮获得焦点(就是那一圈围着按钮的特别细的虚线)
start = True’令变量start的逻辑属性为真
Do While start‘这是一个do loop循环 如果start为真就一直循环
Randomize Timer’让随机数每次都不一样,
i = Rnd() * 6‘让i取1到6的随机数
lblNum(i + base).Caption = Trim(Str(Int(Rnd() * IIf(i = 6, 5, 10))))
'这里lblNum(i + base).Caption 指的是第几个幸运号码框,base是之前判定了的你选的第几注乘以了6(每行6个),也就是从第几行开始,i是随机的,后面的代码trim是去掉两边的空格,str是把内容改为字符串格式,int是取整,后面那个没看太懂,个人觉得这块有错,
DoEvents‘转让控制权,以便让 *** 作系统处理其它的事件
If auto Then’如果auto为真(就是点了自动按钮)
If Timer - sTime >sDiff Then‘这缺少相应的在通用声明区的定义语句,看不太懂
Exit Do’跳出do loop循环
End If‘结束判断
End If’结束判断
Loop
End Sub
Private Sub cmdStop_Click()’停止按钮的单击事件
cmdStop.Enabled = False‘停止按钮不可用
i = 0’让i=0
Do While True‘do loop循环,这个循环判定条件一直是真,通过内部的结束循环语句来结束循环
lblNum(i + base).Caption = Trim(Str(Int(Rnd() * IIf(i = 6, 5, 10))))’同之前的
i = i + 1‘i从0开始依次累加
If i = 7 Then
Exit Do’如果i=7 结束循环
End If
p = Rnd / 5‘在0 到0.2中随机取值
N = Timer’n为系统计时器数值
Do While Timer - N <p‘
Randomize Timer
r = Rnd() * (6 - i) + i’让r在i到6-i间随机取值
lblNum(r + base).Caption = Trim(Str(Int(Rnd() * IIf(r = 6, 5, 10))))
DoEvents‘转让控制权,以便让 *** 作系统处理其它的事件
Loop
Loop
start = False‘start属性变为false
cmdStart.Enabled = True’开始按钮可用
cmdAuto.Enabled = True‘自动按钮可用
cmdStart.SetFocus‘开始按钮得到焦点
End Sub
Private Sub Form_Load()’窗体加载事件
cmdStop.Enabled = False‘停止按钮不可用
For i = 0 To 34
lblNum(i).Caption = ""
Next’把34个数值全清空
End Sub
Private Sub lblNum_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)‘lblNum的鼠标按下事件
Dim r As Integer
If (Not start) And (Not auto) Then’如果没开始,没点自动
r = Index Mod 7‘index意思是第几个,从0开始,比如第一行的第二个index就是1,第二行的第一个index就是7. mod 7 就是对7 取余取出来的数值表示他是这一行的第几个。
manu = True’令menu为真
Do While manu
lblNum(Index) = Trim(Str(Int(Rnd() * IIf(r = 6, 5, 10))))
DoEvents‘转让控制权,以便让 *** 作系统处理其它的事件
Loop
End If
End Sub
Private Sub lblNum_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
manu = False‘鼠标松开时,menu为假,停止上面鼠标按下事件当中的循环。
End Sub
就这些了,望采纳
Dim a(6) As Integer '声明数组Function JC(n As Integer) As Double
'求阶乘
JC = 1
For i = 1 To n
JC = JC * i
Next
End Function
Sub S36_7()
'选号
On Error Resume Next
For i = 0 To 6
Line1:
a(i) = Fix(Rnd * 36) + 1
For j = 0 To i - 1
If a(i) = a(j) Then
GoTo Line1
End If
Next
Next
End Sub
Sub PrintNum()
'输出
For i = 0 To 6
Print a(i)
Next
End Sub
Private Sub Command1_Click()
'调用
Call S36_7
Call PrintNum
End Sub
Private Sub Command2_Click()
'输出
Print "获奖概率"JC(36) / JC(7) / JC(36 - 7)
End Sub
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)