周末无聊写的一个C语言双色球选号程序

功能描述:
程序每执行一次将会输出16组号码,篮球号码依次为01到16。红球的特征:红球区的33个号码在16 * 6个数字中
有30个会出现3次,有3个会出现2次。
如下:
07 10 11 27 30 32:01
04 11 13 16 19 27:02
06 09 17 25 28 31:03
02 05 20 23 32 33:04
09 11 12 14 23 29:05
06 07 17 24 27 30:06
08 12 13 19 31 32:07
04 08 17 18 21 23:08
04 10 14 18 24 26:09
02 03 05 24 29 30:10
01 09 13 16 18 20:11
05 07 16 28 29 33:12
01 03 10 22 25 28:13
01 21 25 26 31 33:14
03 06 15 19 21 26:15
02 08 12 14 15 22:16

出现2次的号码:15、20、22。

代码的实现使用的都是最简单的逻辑:
选号使用随机数反复生成数字,直到数字合法并满足附加的限制条件;
排序使用插入排序。

 

源代码如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

int ShuangSeQiu[16][7];
int flags[33];

int IsValid(int num)
{
	return flags[num-1];
}

void Increment(int num)
{
	flags[num-1]--;
	//printf("%d ", num);
}

int suijishu(void)
{
	int i;

    while(1) { 
		i = rand() % 100 ;
		if((i >= 1) && (i <= 33)) {
			if(flags[i-1]) {
				//flags[i-1]--;
				//printf("%d ", i);
				return i;
			}
		}
   }
}

void numgen(int index)
{
	int t1, t2, t3, t4, t5, t6;

	t1 = suijishu();
	Increment(t1);

	do {
		t2 = suijishu();
	}while(t2 == t1);
	Increment(t2);

	do {
		t3 = suijishu();
	}while((t3 == t1) || (t3 == t2));
	Increment(t3);

	do {
		t4 = suijishu();
	}while((t4 == t1) || (t4 == t2) || (t4 == t3));
	Increment(t4);
		
	do {
		t5 = suijishu();
	}while((t5 == t1) || (t5 == t2) || (t5 == t3) || (t5 == t4));
	Increment(t5);
		
	do {
		t6 = suijishu();
	}while((t6 == t1) || (t6 == t2) || (t6 == t3) || (t6 == t4) || (t6 == t5));
	Increment(t6);

	printf("\n");
	
	ShuangSeQiu[index-1][0] = t1;
	ShuangSeQiu[index-1][1] = t2;
	ShuangSeQiu[index-1][2] = t3;
	ShuangSeQiu[index-1][3] = t4;
	ShuangSeQiu[index-1][4] = t5;
	ShuangSeQiu[index-1][5] = t6;
}

void InsertionSort(int A[], int N)
{
	int j,P;
	int Tmp;

	for(P = 1; P < N; P++) {
		Tmp = A[P];
		for(j = P; (j > 0) && (A[j-1] > Tmp); j--)
			A[j] = A[j-1];
		A[j] = Tmp;
	}
}

void sort(void)
{
	for(int i = 1; i <= 16; i++) {
		InsertionSort(ShuangSeQiu[i-1], 6);
	}
}

void output(void)
{
	FILE* fp;
	char str[32];

	fp = fopen("out.txt", "w");
	for(int i = 1; i <= 16; i++) {
		sprintf(str, "%02d %02d %02d %02d %02d %02d:%02d\n",
			ShuangSeQiu[i-1][0], ShuangSeQiu[i-1][1], ShuangSeQiu[i-1][2],
			ShuangSeQiu[i-1][3], ShuangSeQiu[i-1][4], ShuangSeQiu[i-1][5],
			ShuangSeQiu[i-1][6]);
		fwrite(str, strlen(str), 1, fp);
	}
	fclose(fp);
}

int main(void)
{
	printf("Hello World!\n\r");

	for(int j = 1; j <= 33; j++) {
		flags[j-1] = 3;
	}

	srand((unsigned)time(NULL));

	for(int i = 1; i <= 16; i++) {
		ShuangSeQiu[i-1][6] = i;
		numgen(i);
	}
	sort();
	output();
}


 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值