原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=120387
我刚开始写双色球机选程序都是像下面这样写
#include<math.h> #include<stdlib.h> #include<time.h>
main() { int i ,j ,k; int num[6];
srand((unsigned)time(NULL));
for(i = 0;i < 6;i++) { num[i] = random(33)+1;
for(j = 0;j < i;j++) { if(num[i] == num[j]) { i--; j = 7; } } } num[5] = random(16)+1; for(i = 0;i < 6;i++) printf("%2d ",num[i]);
printf("+%2d ",num[5]); getch(); }
这种写法的好处是好想
但是要承认的是这种写法效率很低(而且这个程序还是没有加号码大小的排序)
要只输出少量号码组的时候可能并没有表现出它的低效问题
但是在产生并输出大量这些号码的时候就会表现出其低效性 为此我想到了一个更好的方法:
#include<math.h> #include<stdlib.h> #include<time.h>
main() { int i ,j ,k; int num[6];
srand((unsigned)time(NULL));
num[0] = random(28)+1; for(i = 1;i < 6;i++) { num[i] = num[i-1]+random(28-num[i-1]+i)+1; }
num[5] = random(16)+1; for(i = 0;i < 6;i++) printf("%2d ",num[i]);
printf("%2d ",num[i]); getch(); }
大家可以很快的看出这个程序要优于上一个程序
虽然这样效率会很高 但是对于做彩票软件的人来说会遇到一个问题
就是在对大量彩票号码组进行比较是否重复的比较 和 号码的定位 的时候却会很麻烦
所以我就想到一个通过对号码标号计数的方法来自选
#include<math.h> #include<stdlib.h> #include<time.h> #include<graphics.h>
int Init(); int MakeForm(); int *(OutNum)(); unsigned long C(int a ,int b); unsigned long A(int a ,int b);
unsigned long Form[29][6]; unsigned long Max;
int main() { Init(); MakeForm(); while(getch() != 27) OutNum(); }
int Init() /* 显示模式和随机函数初始化 用图形模式是为了能在一个屏幕中显示更多的信息 */ { int gd = DETECT,gm = 0;
initgraph(&gd ,&gm ,""); /* 图形模式初始化 */ srand((unsigned)time(NULL)); /* 随机函数时间点初始化 */ Max = C(6 ,33); }
int MakeForm() /* 制定号码查询表 在真正的应用中就可不用做输出了 */ { int i ,j;
for(i = 1;i <= 28;i++) { Form[i][0] = C(5,33-i); printf("%3d-->%-2ld\t",i ,Form[i][0]); Form[i][1] = C(4,32-i); printf("%3d-->%-2ld\t",i+1 ,Form[i][1]); Form[i][2] = C(3,31-i); printf("%3d-->%-2ld\t",i+2 ,Form[i][2]); Form[i][3] = C(2,30-i); printf("%3d-->%-2ld\t",i+3 ,Form[i][3]); Form[i][4] = 29-i; printf("%3d-->%-2ld\n",i+4 ,Form[i][4]);
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页12 下一页
上一篇:C语言版学生管理系统,作者:没牙的狼 下一篇:C语言图形模式编程,个性鼠标
|