c语言编写彩票程序:在1-33之间随机生成7个不重复的数
时间: 2024-05-30 17:15:55 浏览: 16
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int lottery[7];
int i, j;
srand((unsigned int)time(NULL)); // 使用当前时间作为随机数种子
for(i = 0; i < 7; i++) {
lottery[i] = rand() % 33 + 1; // 生成1-33之间的随机数
for(j = 0; j < i; j++) {
if(lottery[i] == lottery[j]) { // 判断是否重复
i--;
break;
}
}
}
printf("本期彩票开奖号码为:");
for(i = 0; i < 7; i++) {
printf("%d ", lottery[i]);
}
printf("\n");
return 0;
}
相关问题
编写一个c语言程序,在1~41之间随机抽取20个不重复的数字。
好的,我可以帮你解决这个问题。下面是C语言程序的代码实现:
```
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 20 //抽取数量为20
int main()
{
int a[41], i = 1, j, k; //定义数组a、计数器i、随机数j和循环变量k
srand((unsigned)time(NULL)); //设置随机数种子
for (i = 1; i <= 41; i++) //初始化数组a
a[i] = i;
for (i = 1; i <= N; i++) //循环抽取N个不重复的数
{
j = rand() % (41 - i) + 1; //生成随机数j
printf("%d ", a[j]); //输出抽中的数字
for (k = j; k < 41; k++) //去掉数组a[j],将数组a[j+1]~a[41]左移
a[k] = a[k + 1];
}
printf("\n"); //输出换行符,美化输出结果
system("pause");
return 0;
}
```
程序的功能是在1~41之间随机抽取不重复的20个数字,并输出这20个数字。程序中采用Fisher–Yates随机置乱算法来实现抽取,抽取时将已抽中的数字从数组中剔除,保证抽取到的数字不重复。
帮我用C语言写一个随机生成6个0-80的不重复的数的程序
好的,以下是用C语言编写的随机生成6个0-80的不重复的数的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 6 // 生成随机数的个数
#define MAX_NUM 80 // 随机数的最大值
int main() {
int i, j, num, nums[N] = {0};
// 设置随机数种子
srand((unsigned)time(NULL));
// 循环生成6个不重复的随机数并输出
for (i = 0; i < N; i++) {
do {
num = rand() % (MAX_NUM + 1); // 生成0-80之间的随机数
for (j = 0; j < i; j++) {
if (nums[j] == num) { // 判断是否重复
break;
}
}
} while (j < i); // 如果重复则重新生成
nums[i] = num; // 将生成的随机数存入数组
printf("%d ", num); // 输出随机数
}
return 0;
}
```
程序解析:
1. 定义了两个预处理指令:`#define N 6`表示生成随机数的个数为6,`#define MAX_NUM 80`表示随机数的最大值为80。
2. 在主函数中,首先定义了三个变量:`i`表示循环计数器,`j`表示查找重复数用的计数器,`num`表示生成的随机数。
3. 定义了一个长度为6的整型数组`nums`,用于存储生成的随机数。
4. 使用`srand()`函数设置了随机数种子,保证每次运行程序生成的随机数不同。
5. 使用`for`循环生成6个不重复的随机数,并将其输出。在循环中,先使用`do-while`循环生成随机数,如果生成的随机数与已有的随机数重复,则重新生成随机数。最后将生成的随机数存入数组,使用`printf()`函数输出随机数。
注意事项:
1. 在循环中使用`do-while`循环生成随机数,这样可以保证每次循环至少执行一次,避免因为第一次生成的随机数恰好与后面的随机数重复而死循环。
2. 在判断重复时,使用`for`循环遍历已有的随机数,如果找到重复的数,则跳出循环。
3. `rand() % (MAX_NUM + 1)`的结果为0-80之间的整数,注意要加上1,因为取模的结果不包括右端点。
希望能对您有所帮助!
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)