怎么在特定范围产生不重复的随机整数

void Not_same_randnum(int randnum,int n1,int n2) //randnum:需要产生多少个随机数   n1与n2:范围
{
	int* a = new int[randnum] ;
	
	//memset(a, 0, sizeof(a));       //memset函数只能给字符型数组用
	fill(a, a + (randnum ), 0);      //fill适用所有类型,给a的randnum个函数赋0值

	for (int i = 0; i < randnum; i++)
	{
		a[i] = n1;
		n1++;
	}

	srand(time(0));               //播下随机的种子,确保每次随机排序都不一样
	random_shuffle(a,a+randnum);  //用于打乱数组a的排序,randnum表示打乱的个数

	for (int i = 0; i < randnum; i++)//下为控制输出格式的程序
	{
		if (i % 5 == 0)
		{
			printf("\n");
		}
		printf("%d     ", a[i]);
		if (How_mang_bits(a[i]) == 1)
		{
			printf(" ");
		}
	}
	printf("\n");
	
}

 

思路:通过将复杂的不重复问题转为顺序数组排序来避免重复并实现随机

注意:之前经常用的memset函数发现只能给字符型数组用

fill函数:fill(起始位置,结束位置,填充的数)

random_shuffle函数:random_shuffle(起始位置,结束位置)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值