求个简单的彩票小程序 课设用 帮帮忙

求个简单的彩票小程序 课设用 帮帮忙,第1张

#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 = 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

Print

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11940726.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存