首页 » 技术分享 » C语言简单的双色球生成代码

C语言简单的双色球生成代码

 

闲来无事,想着写一个双色球生成代码,顺便温习一下随机数产生和排序算法。

codeblock 17.12编译通过并可运行,希望大家中500W。 :)

双色球每注由6颗红球和1颗蓝球组成,其中6颗红球的取值范围是[1, 33]不能重复,蓝球取值范围是[1, 16],可以和红球有重复。

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

#define    RED_BALL_NUM       6
#define    RED_BALL_VAL_MIN   1
#define    RED_BALL_VAL_MAX   33

#define    BLUE_BALL_NUM      1
#define    BLUE_BALL_VAL_MIN  1
#define    BLUE_BALL_VAL_MAX  16

#define    TRUE               1
#define    FALSE              0

typedef unsigned int u32;

static u32 GenRandValByRangLimit(u32 MinVal, u32 MaxVal)
{
    return (rand() % (MaxVal - MinVal) + MinVal + 1);
}

static u32 CheckValExistInArry(u32 Val, u32 *Arry, u32 ArrySize)
{
    u32 i;

    for(i = 0; i < ArrySize; i++)
    {
        if(Val == Arry[i])
        {
            return TRUE;
        }
    }

    return FALSE;
}

static void SortArry(u32 *Arry, u32 ArrySize)
{
    u32 temp;
    u32 i;
    u32 j;

    for(i = 0; i < ArrySize - 1; i++)
    {
        for(j = i + 1; j < ArrySize; j++)
        {
            if(Arry[i] > Arry[j])
            {
                temp = Arry[i];
                Arry[i] = Arry[j];
                Arry[j] = temp;
            }
        }
    }
}

static void PrintArry(u32 *Arry, u32 ArrySize)
{
    u32 i;

    for(i = 0; i < ArrySize; i++)
    {
        printf("%4d", Arry[i]);
    }
}

int main()
{
    u32 i;
    u32 j;
    u32 lottery;
    u32 temp;
    srand((unsigned)time(NULL)); // 时间随机数种子

    printf("Please enter how many lottery:\n");
    scanf("%d", &lottery);  //买多少注双色球
    u32 RedBallArry[RED_BALL_NUM] = {0}; //声明红球数组

    for(i = 0; i < lottery; i++)
    {
        printf("[%2d]", i);
        printf("  RED:");
        for(j = 0; j < RED_BALL_NUM; j++)
        {
            temp = GenRandValByRangLimit(RED_BALL_VAL_MIN - 1, RED_BALL_VAL_MAX); //产生一个1~33的随机数
            if(CheckValExistInArry(temp, RedBallArry, RED_BALL_NUM)) //检查这个随机数是否已存在当前数组中
            {
                do
                {
                    temp = GenRandValByRangLimit(RED_BALL_VAL_MIN - 1, RED_BALL_VAL_MAX);
                }while(CheckValExistInArry(temp, RedBallArry, RED_BALL_NUM)); //重新生成随机数,直到当前数组没有该数
                RedBallArry[j] = temp; //赋值到红球数组
            }
            else
            {
                RedBallArry[j] = temp; 赋值到红球数组
            }
        }
        SortArry(RedBallArry, RED_BALL_NUM); //排序红球数组
        PrintArry(RedBallArry, RED_BALL_NUM); //打印红球数组
        memset(RedBallArry, 0, sizeof(RedBallArry)); //重置当前数组
        printf("   BLUE:%4d\n", GenRandValByRangLimit(BLUE_BALL_VAL_MIN - 1, BLUE_BALL_VAL_MAX)); //生成并打印蓝球随机数
    }

    return TRUE;
}

转载自原文链接, 如需删除请联系管理员。

原文链接:C语言简单的双色球生成代码,转载请注明来源!

0