标题:[讨论]36选7
只看楼主
非凡DZ
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2007-4-6
 问题点数:0 回复次数:6 
[讨论]36选7
大家好,以下是我写的一个小程序,我觉得在判断每次随机产生的数字是否已经存在时有些问题,诸如:当j=0时,temp[j-1],temp[j-2]就可能存在错误,我用一个同样可能出现数组下标为负数的数组与其进行比较,解决了问题,可觉得还是不够欠妥,请高手多多指点,有没有什么更好的方法,小弟在这里先谢谢了。

/****************************************************************
作者:非凡DZ
创建时间:2007年4月11日
编译环境:VC6.0
描述:36选7体育彩票(第一版)
*****************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int jisuan(int);
void function()
{
int i,j,k,m,n,q,number[50],select,count=0,count1=0,zhushu=0,zhushu1=0,sign;
int a[50],temp1[50],temp[50],temp2,temp3;
int cost1=0,cost2=0;
char ans,ans1;
char x[50];
srand(time(NULL));
do
{
do //判断输入数据是否在0-4之间
{
i=0,sign=1;
printf("\t\t欢迎购买36选7体育彩票\n");
printf("\n0.退出\t1.机选\t2.手选\t3.结算\t4.关于\n");
printf("请选择功能:");
scanf("%s",&x);
while(x[i])
{
if(x[i]<48||x[i]>57)
{
sign=0;
printf("\n输入有误,请在0-4之间选择!\n\n");
break;
}
i++;
}
if(sign==1)
{
break;
}
}while(1);
select=atoi(x); //将字符串转换为整型
switch(select)
{
case 0: //退出程序
if((zhushu>0) || (zhushu1>0))
{
printf("\n您已经购买了彩票,请结算后退出!\n\n");
break;
}
while(1)
{
printf("\n您还未购买彩票,是否退出(y/n)");
scanf(" %c",&ans);
if(ans=='y' || ans=='Y')
{
printf("\n欢迎光临本系统,再见!\n");
break;
}
if(ans=='n' || ans=='N')
{
printf("\n");
break;
}
else
{
printf("\n提示:请在y和n之间进行选择!\n");
continue;
}
}
break;
case 1: //机选号码
if(zhushu>0)
{
printf("您已经购买了机选号码!\n\n");
break;
}
do
{
i=0,sign=1;
printf("请输入要购买的彩票注数:");
scanf("%s",&x);
while(x[i])
{
if(x[i]<48||x[i]>57)
{
sign=0;
printf("\n输入有误!\n\n");
break;
}
i++;
}
if(sign==1)
{
break;
}
}while(1);
zhushu=atoi(x); //将字符串转换为整型
for(i=0;i<zhushu;i++)
{
for(j=0;j<1000;j++)
{
number[j]=rand()%100;
if(count==7)
{
break;
}
if((number[j]<1) || (number[j]>36) || (number[j]==temp[j]) || (number[j]==temp[j-1]) || (number[j]==temp[j-2]) || (number[j]==temp[j-3]) || (number[j]==temp[j-4]) || (number[j]==temp[j-5]) || (number[j]==temp[j-6]))
{
j-=1;
continue;

}
else
{
temp[j]=number[j];
count++;
}
}
count=0;
for(m=0;m<6;m++) //对每注彩票数字进行冒泡排序
{
for(n=6;n>m;n--)
{
if(temp[n]<temp[n-1])
{
temp3=temp[n];
temp[n]=temp[n-1];
temp[n-1]=temp3;
}
}
}
printf("\n第%d注为:",i+1);
for(m=0;m<7;m++)
{
printf("%d ",temp[m]);
}
}
cost1=jisuan(zhushu);
printf("\n\n");
break;
case 2: //手选号码
if(zhushu1>0)
{
printf("您已经购买了手选号码!\n\n");
break;
}
do
{
i=0,sign=1;
printf("请输入要购买的彩票注数:");
scanf("%s",&x);
while(x[i])
{
if(x[i]<48||x[i]>57)
{
sign=0;
printf("\n输入有误!\n\n");
break;
}
i++;
}
if(sign==1)
{
break;
}
}while(1);
zhushu1=atoi(x); //将字符串转换为整型
if(zhushu1>0)
{
printf("请在1-36之间进行选择!\n");
}
for(i=0;i<zhushu1;i++)
{
printf("\n请输入第%d注彩票数字:\n\n",i+1);
for(j=0;j<1000;j++)
{
if(count1==7)
{
break;
}
do
{
q=0,sign=1;
printf("请输入第%d个数:",j+1);
scanf("%s",&x);
while(x[q])
{
if(x[q]<48||x[q]>57)
{
sign=0;
printf("\n输入有误!\n\n");
break;
}
q++;
}
if(sign==1)
{
break;
}
}while(1);
a[j]=atoi(x); //将字符串转换为整型
temp1[j]=a[j];
count1++;
if((a[j]<1) || (a[j]>36) || (a[j]==temp1[j-1]) || (a[j]==temp1[j-2]) || (a[j]==temp1[j-3]) || (a[j]==temp1[j-4]) || (a[j]==temp1[j-5]) || (a[j]==temp1[j-6]))
{
printf("输入数字有误,请重新输入!\n\n");
count1-=1;
j-=1;
continue;
}
}
for(m=0;m<6;m++) //对每注彩票数字进行冒泡排序
{
for(n=6;n>m;n--)
{
if(a[n]<a[n-1])
{
temp2=a[n];
a[n]=a[n-1];
a[n-1]=temp2;
}
}
}
printf("\n第%d注彩票为:\n",i+1); //输出每注彩票
for(k=0;k<7;k++)
{
printf("%d ",a[k]);
}
count1=0;
}
cost2=jisuan(zhushu1);
printf("\n\n");
break;
case 3: //结算程序
if((zhushu>0) || (zhushu1>0))
{
printf("\n您购买了%d注机选号码,%d注手选号码!\n",zhushu,zhushu1);
printf("共%d注彩票,需付%d元!\n",zhushu+zhushu1,cost1+cost2);
while(1)
{
printf("\n是否结算并退出(y/n)");
scanf(" %c",&ans1);
printf("\n");
if(ans1=='y' || ans1=='Y')
{
printf("感谢您对中国体育事业的支持!\n\n");
exit(0); //正常跳出程序
}
if(ans1=='n' || ans1=='N')
{
break;
}
else
{
printf("提示:请在y和n之间进行选择!\n");
continue;
}
}
break;
}
else
{
printf("\n您还未购买彩票,请重新进行选择!\n\n");
break;
}
case 4: //关于
printf("\n\t本系统为36选7体育彩票第一版\n");
printf("\n\t开发者:非凡DZ\n");
printf("\n\t联系方式:daizhenghenry@yahoo.com.cn\n\n\n");
break;
default:
printf("\n输入有误,请在0-4之间选择!\n\n");
}
}while(ans!='y' && ans!='Y');
}
int jisuan(int q) //结算函数
{
int result;
result=2*q;
return result;
}
void main()
{
function();
}

[此贴子已经被作者于2007-5-7 8:15:02编辑过]

搜索更多相关主题的帖子: 体育彩票 数字 环境 temp 
2007-05-06 16:58
zy1437zy
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-25
得分:0 

大哥啊!
你这么长的东东,试问除了对你有非分只想的人回去看
恐怕没人了吧!
把关键地方的代码或算法给出来,好吗·!~
2007-05-06 19:15
fengsung
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-5-6
得分:0 

太复杂

2007-05-06 20:05
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
36选7体育彩票
是不是指1-36里面选出7个数字.
那就定义一个大他data[37]的数组,来标示哪个数字已经产生了.
大致如下:
for(int i=1;i<=7;)
{
t=rand()%36+1;
if(data[t]==0)
{
data[t]=1;
i++;
}
}

倚天照海花无数,流水高山心自知。
2007-05-06 20:16
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 

看了一下,总体不错,提以下几点建议
1.增强程序容错处理能力
2.最好使用汉字库等,否则在tc编译后于windows执行会出现乱码
3.最好使程序支持鼠标,并实现图形化,方便操作
4.程序书写格式请日后注意,最好更明显一些,使条理清晰,方便日后调试与修改

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-06 20:16
linuxbabya
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-4-19
得分:0 

补加些对往期数据分析,用先验概率统计算算可能作为软件的功能就更好了。

2007-05-07 01:34
思天想地
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-7-5
得分:0 
看不明白
2011-07-08 17:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-137264-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147419 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved