您的位置:首页 > 编程语言 > C语言/C++

生成一注双色球-c语言

2014-04-10 21:25 253 查看
1、最开始的程序

#include<stdio.h>
#include<stdlib.h>
int produce_red();//每次产生一个红号
int produce_blue();//生成蓝号
void sort(int *a,int len);
/******************************************************
*该程序用来生成一注双色球
*红号六个是不能重复的,首先生成第一个红号,然后一次生成
*后面的红号,生成时依次与前面的比较,若与其中的一个相等
*则换一个随机的号,再一次比较,设一个计数器count,若都不
*相等,则count=i;注意count清零
******************************************************/
int main()
{
int i,j;
int count=0;
int tmp;
int ticket[7]={0};
srand((int)time(0));    //设随机数种子,时间单位为秒,一秒内出的随机数相等
for(i=0;i<6;i++)
{
if(i==0)
ticket[0]=produce_red();
//ticket[6]=produce_red();
else
{
//j=i;
flag:
tmp=produce_red();
count=0;
for(j=0;j<i;j++)
if(ticket[j]==tmp)
goto flag;
else
count++;
if(count==i)
{
ticket[i]=tmp;
}
count=0;
}
}
ticket[6]=produce_blue();
sort(ticket,6);
for(i=0;i<6;i++)
{
printf("%d ",ticket[i]);
}
printf("| %d",ticket[6]);
printf("\n");
}
int produce_red()//一次产生一个红球
{
int j;
j=1+(int)(33.0*rand()/(RAND_MAX+1.0));
return j;
}
int produce_blue()
{
int j;
//srand((int)time(0));
j=1+(int)(16.0*rand()/(RAND_MAX+1.0));
return j;
}
void sort(int *a,int len)
{
int i=0;
int j;
int t;
for(i=0;i<len;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}

}


2、改进后的算法

#include<stdio.h>
#include<stdlib.h>
int produce_red();
int produce_blue();
void sort(int *a,int len);
/***********************************************
*彩票的改进程序,用一个数组保存所有的数字,每当
*生成一个号时,让相应的数组中的数字置零,以保证
*不会重复
***********************************************/
int main()
{
int i,j,count=0;
int tmp;
int res[7];//保存最后生成的一注彩票
int num[33]={1,2,3,4,5,6,7,\
8,9,10,11,12,13,\
14,15,16,17,18,\
19,20,21,22,23,\
24,25,26,27,28,\
29,30,31,32,33};
srand((int)time(0));
while(count!=6)
{
tmp=produce_red();
if(num[tmp-1]!=0)
{
res[count]=tmp;
count++;
num[tmp-1]=0;
}
else
continue;
}
res[6]=produce_blue();
sort(res,6);
for(i=0;i<6;i++)
printf("%d ",res[i]);
printf("| %d\n",res[6]);
}
int produce_red()//一次产生一个红球
{
int j;
j=1+(int)(33.0*rand()/(RAND_MAX+1.0));
return j;
}
int produce_blue()
{
int j;
//srand((int)time(0));
j=1+(int)(16.0*rand()/(RAND_MAX+1.0));
return j;
}
void sort(int *a,int len)//冒泡排序
{
int i=0;
int j;
int t;
for(i=0;i<len;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: