使用C语言生成随机彩票的双色球或大乐透的球号数

该程序功能为从键盘输入想要够买的彩票注数,随后生成对应个随机球号数并输出(显然随机数不能重复)。

代码如下:

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

//双色球:红:33选6 蓝:16选1
//大乐透:红:35选5 蓝:12选2

#define RED 35
#define pick1 5
#define BLUE 12
#define pick2 2

int r1[RED]={0},b1[BLUE]={0},r2[RED]={0},b2[BLUE]={0};

void red()
{
    int i,j,k;
    for(j=0,i=0;i<pick1;i++,j++)
    {
         r1[i]=rand()%RED+1;
        for(k=0;k<=i;k++)
        {
            r2[j]=r1[i];
            if(r1[i]==r2[k] && i!=k)
            {
                i--;
                j--;
                break;
            }
        }
    }
    for(i=0;i<pick1;i++)
        printf("%02d ",r1[i]);
}

void blue()
{
    int i,j,k;
    for(j=0,i=0;i<pick2;i++,j++)
    {
         b1[i]=rand()%BLUE+1;
        for(k=0;k<=i;k++)
        {
            b2[j]=b1[i];
            if(b1[i]==b2[k] && i!=k)
            {
                i--;
                j--;
                break;
            }
        }
    }
    for(i=0;i<pick2;i++)
        printf("%02d ",b1[i]);
}

int main()
{
    int n,i;
    srand(time(NULL));
    printf("Please enter the number:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("<%d>  ",i);
        red();
        printf("----");
       blue();
       printf("\n");
    }
    system("pause");
    return 0;
}

修改define中相应的数字,即可改变对应颜色输出的球号的个数。

其中生成不重复随机数的方法为:
通过比较当前生成数与除它本身之外已生成的数,若有相同的数,则对它进行重新赋值,直到没有重复的数为止。

程序运行结果如下:
在这里插入图片描述

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个用C语言编写的随机抽取连续不重复的学号程序: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int start_num, end_num, num_count, i, j, random_num; int *num_array; time_t t; // 输入起始学号、终止学号和需要抽取的学号个数 printf("请输入起始学号:"); scanf("%d", &start_num); printf("请输入终止学号:"); scanf("%d", &end_num); printf("请输入需要抽取的学号个数:"); scanf("%d", &num_count); // 计算学号总数 int total_num = end_num - start_num + 1; // 如果需要抽取的学号个数大于总数,输出错误提示并退出程序 if (num_count > total_num) { printf("需要抽取的学号个数不能大于总数!\n"); return 1; } // 为学号数组分配内存空间 num_array = (int *)malloc(total_num * sizeof(int)); if (num_array == NULL) { printf("内存分配失败!\n"); return 1; } // 初始化学号数组 for (i = 0; i < total_num; i++) { num_array[i] = start_num + i; } // 随机抽取学号 srand((unsigned)time(&t)); for (i = 0; i < num_count; i++) { // 生成随机数 random_num = rand() % (total_num - i); // 输出抽取到的学号 printf("%d ", num_array[random_num]); // 将抽取到的学号从数组中删除 for (j = random_num; j < total_num - i - 1; j++) { num_array[j] = num_array[j + 1]; } } // 释放学号数组的内存空间 free(num_array); return 0; } ``` 该程序首先要求用户输入起始学号、终止学号和需要抽取的学号个数,然后计算出学号总数。如果需要抽取的学号个数大于总数,则输出错误提示并退出程序。接着,程序为学号数组分配内存空间,并初始化该数组。随后,程序用time()函数获取当前时间,然后用该时间值作为随机数生成器的种子,使用rand()函数生成随机数,并从学号数组中随机抽取学号,输出抽取到的学号,并将抽取到的学号从数组中删除。最后,程序释放学号数组的内存空间,结束运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值