C 语言中随机数的生成

本文探讨如何在C语言中生成n个不重复的随机数,并提供了检查序列有序性和是否存在重复元素的方法,包括使用排序和C++ STL中的set结构。同时介绍了 rand() 和 set.insert() 的用法,以及编程珠玑中的相关理念。
摘要由CSDN通过智能技术生成

1. 产生n个不重复的随机数字,范围是[0, n)。基本思想:有序数据的随机交换。

static int randint(int l, int u)
{	return l + rand() % (u-l+1);
}

/* generate n distinct random integer in range [0, n) 
 * the implementation depends on a global varible 
 *     int gRawDataSet[DATA_SET_SIZE];
 * 
 * generate random index then replace the current element
 * with that one.
 */
static void gen_distinct_random(int n)
{
	//printf("%d\n", n);
	int i;
	for (i = 0; i < n; i++)
	{
		gRawDataSet[i] = i;
	}
	for (i = 0; i < n; i++)
	{
		int idx = randint(i, n - 1); //printf("idx = %d \n", idx);
		int t = gRawDataSet[idx];
		gRawDataSet[idx] = gRawDataSet[i];
		gRawDataSet[i] = t;
		printf("%d ", gRawDataSet[i]);
	}
	printf("\n");
}

2.检验产生的随机数字序列是否有序? 是否存在重复元素?序列是否有序的判断是一个十分直观的问题,是否存在重复元素的判断就要复杂一些了。可以采用的方法有两类。第一类是采用先排序将重复元素集中再进行检测的方式。第二类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值