如何用C语言从固定的一些数中产生随机数?
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/01 14:39:55
如何用C语言从固定的一些数中产生随机数?
如何用C语言从固定的一些数中产生随机数?
如何用C语言从固定的一些数中产生随机数?
楼上的有问题,很可能相当长的时间才能完成一次随机,运气不好一天都完不成一次
/* 我自己想的一个方法:
1,数组flag[48],表示48个数是否被选中,初始化为0,表示未被选中.
2,srand(),rand()得到一个随机数m.
3,然后得到我们需要的随机数.第一次是m%48+1,第二次是m%47+1,第三次是m%46+1,...,最后一个不需要随机了.
4,每次获取随机数后,这个随机数表示第几个未被选中的数,每次选中后将flag标志置1.
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int Num = 48; // 需要随机的次数
// 选中标志
int Flag[48] =; // 标记是否已经被随机
// 输出数据
int bufArr[48]=; // 保存随机后的数据
int i = 0;
int j = 0;
int Rand_num = 0; // 保存中间随机到的数据
int Rand_max = 0; // 保存当前存在的数据数量
Rand_max = Num;
srand(time(0));
// 产生随机数
for(i = 0; i < Num; i++)
{
Rand_num = rand()%Rand_max + 1; // 获取随机数Rand_num
for(j = 0; j < Num; j++) // 遍历所有数据
{
if(!Flag[j]) // 判断该数据是否已经随机
Rand_num--;
if(!Rand_num) // 判断是否数到第Rand_num个没有标记的数据
break;
}
bufArr[i] = j+1; // 获取结果,第Rand_num个没有标记的数据
Flag[j] = 1; // 置获取标志
Rand_max--; // 需要随机的数减少一个
}
// 每次都不一样
for(i = 0; i < Num; i++)
{
if(i%8 == 0)
printf("\n");
printf("%5d", bufArr[i]);
}
printf("\n");
return 0;
}