`

理解算法 !高效代码生成 无重复的随机数

阅读更多
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
#define N 1000
#define M 10
 
int main()
{
 srand(time(NULL));
  
 int m = M;
  
 for (int i = 0; i < N; i++)
 {
  if ((rand()%(N - i)) < m)   //此处rand()%(N - 1)出现每一个小于(N - i)的数的概率是一样的
  {  //被取到,m值减 1 ,输出结果 i 
   m--;
   printf("%d\n", i);
  }
 }
  
 return 0;
}

 如果上面的比较难理解 可以先参考下面的普通办法

 #include<iostream>
#include<time.h>
#define N 100
int a[N];//结果数组
void swap(int& i,int& j)
{
 int temp=i;
 i=j;
 j=temp;
}
int main()
{
 int i=0;
 for(i=1; i<=N; i++)
 {
  a[i]=i;
 }
 srand(unsigned(time(NULL)));
 for(i=N-1; i>0; i--)
 {
  swap(a[i], a[rand()%i]);
 }
 return 0;
}
 
/*
解决思路:
这个问题的实际应用就比如要随机生成一副扑克牌,54张,顺序是乱的,但显然牌面不能重复。用随机数生成器生成的数总是会重复的,所以,不能把生成的数直接保存下来作为结果。那么怎么办?

你想想,如果是真实的扑克牌,你是怎么打乱的?你会说:洗牌啊!没错,就是洗牌!洗牌是什么过程?说白了,是交换!把两摞牌交换位置,用类似的方法就可以解决楼主的问题。

先按顺序在数组里生成1-100的数,然后产生一对0-99之间的随机数,把这两个数所表示下标的数交换位置,如此重复几十次,原先的数组就被打乱了。*/

 

 

1
3
分享到:
评论
3 楼 guangqiang 2013-03-20  
图受各种 写道
random_shuffle()就能完成这个任务了

不过还是要了解一下 算法和思路比较好啊 你说呢?
2 楼 图受各种 2013-03-20  
random_shuffle()就能完成这个任务了
1 楼 图受各种 2013-03-20  
stl的random——shuffle();

相关推荐

    取不重复随机数.rar

    总结来说,"取不重复随机数"是一个涵盖概率论、算法和数据结构等多个领域的IT知识主题,易语言的示例代码可以帮助我们更好地理解和实现这一功能。通过学习和实践,我们可以根据具体需求选择合适的方法生成不重复的...

    java生成十个不重复的随机数

    System.out.println("生成的十个不重复随机数为:"); for (int number : uniqueNumbers) { System.out.println(number); } } } ``` 在这个代码中,我们创建了一个`HashSet`来存储生成的随机数,然后在一个循环...

    产生不重复随机数算法

    本文将深入探讨一种在Java中实现的高效算法,该算法能够生成指定范围内的不重复随机数数组,特别适用于随机组题等应用场景。 ### 核心知识点解析 #### 1. 算法原理 算法的核心思想是首先创建一个包含指定范围内...

    产生20个不重复的随机数的代码

    在IT领域,生成不重复的随机数序列是一个常见的需求,尤其是在需要进行随机抽样、数据模拟或游戏开发等场景中。下面将详细解析如何通过编程实现这一目标,并深入探讨其背后的算法逻辑和技术要点。 ### 核心知识点:...

    C++随机数生成(无关联随机数)

    在C++编程中,生成随机数是一项常见的任务,特别是在模拟、游戏开发、数据分析等领域...理解这些概念对于编写高效且符合需求的随机数生成代码至关重要。在使用过程中,应根据项目的特性和需求来选择合适的工具和方法。

    0-99的不重复随机数

    在编程领域,生成0到99之间不重复的...通过以上分析,我们可以看到,生成0-99的不重复随机数虽然看似简单,但背后涉及到了随机数生成、数据结构、算法以及错误处理等多个编程知识点,这些都对提升编程能力大有裨益。

    易语言取随机数不重复

    5. **优化技巧**:对于大量不重复随机数的生成,使用集合(如易语言的“列表表”)比数组更高效,因为集合能快速判断元素是否存在。此外,可以考虑使用“交换”操作优化算法,减少循环次数。 6. **错误处理**:在...

    随机数生成算法,数值算法

    在IT领域,随机数生成算法扮演着至关重要的角色,尤其在模拟、加密、游戏开发、统计计算和各种科学计算中。随机数,虽然被称为“随机...通过分析这些代码,我们可以深入理解如何在实际项目中使用这些算法来生成随机数。

    生成1到n的随机数

    可以考虑使用更高效的随机数生成库,或者优化算法来提高性能。 - 如果需要生成随机数序列的频率很高,可以考虑预先生成一系列随机数,并将其存储起来供后续使用,从而减少每次生成所需的时间。 6. **总结** - 本...

    五种随机数发生器-C++与MATLAB代码_matlab_tonek9z_随机数_随机数生成办法_

    1. **默认随机数生成器**:MATLAB的默认随机数生成器是Mersenne Twister算法,它提供了一种高效的、长期周期的随机数序列。通过`rand()`函数,我们可以生成0到1之间的均匀分布随机数,如`x = rand();` 2. **指定...

    以时间为种子生成随机数

    在计算机科学中,随机数是各种算法和模拟中不可或缺的一...同时,理解和掌握随机数生成的基本原理和技巧,对于编写高效、可靠的代码至关重要。在实际应用中,应根据需求选择合适的随机数生成器,并考虑其性能和随机性。

    java生成抽样随机数的多种算法

    3. **元素移除随机算法**:高效且能保证无重复,适用于生成一定数量的无重复随机数。 在实际应用中,我们还需要考虑随机数生成的范围,即`start`和`end`参数。`NumberUtils.randomInteger(start, end)`函数用于生成...

    数学建模MATLAB代码蒙特卡洛算法模拟随机数代码

    通过这种方式,不仅能够直观地理解蒙特卡洛方法的基本原理,还能亲身体验如何利用MATLAB进行高效编程。 #### 五、总结 通过对MATLAB与蒙特卡洛方法的介绍和案例分析,我们可以看出这两种工具在数学建模领域的巨大...

    VC 在指定的区间内生成随机数.rar

    在“codesc.net”这个子文件中,可能包含了实现这些步骤的具体代码,通过阅读和分析这些代码,开发者可以更好地理解如何在VC++环境下自定义随机数生成的区间。源码中的注释和示例可能还包括了错误处理、性能优化或...

    Intel随机数实现

    良好的加密算法依赖于高质量的随机数,这些随机数用于生成密钥、挑战值、非重复使用的一次性密码等关键元素。Intel公司推出的硬件级别的随机数生成器(RNG)为加密应用程序提供了强大的支持。本文旨在详细介绍Intel...

    基于DSP的线性同余法生成随机数的头文件 可以轻松调用 已经在CCS上调试通过

    通过理解算法原理,选择合适的参数,并在CCS环境下进行调试,我们可以轻松地在TI DSP芯片上实现高效、可靠的随机数生成。在实际项目中,根据具体需求,可以调用或修改提供的头文件,以达到最佳的性能和效果。

    js超简单实用随机产生1-100个数字不重复

    在JavaScript编程语言中,生成1到100之间不重复的随机数字是一项常见的需求,尤其在游戏、模拟或数据测试等场景中。...不过,上述解释已经涵盖了生成1到100之间不重复随机数的基本思路和常见实现方式。

    suijishu.rar_简单随机数_随机数生成

    随机数生成器(Random Number Generator, RNG)是一种能够产生一系列看似无规律的数字的算法。在计算机科学中,我们通常使用的随机数是伪随机数,因为它们实际上是根据特定的数学规则计算出来的,但这些数字在统计上...

    随机生成11位数字

    根据给定的信息,我们可以深入探讨如何在编程环境中生成指定...通过以上分析和改进,我们不仅能够准确地生成所需的11位随机数字串,还确保了代码的高效性和适用性。这对于IT行业的开发人员来说是非常有价值的技能之一。

    javascript生成不重复的随机数

    JavaScript生成不重复随机数的方法是编程中常见的需求,特别是在游戏开发、模拟实验或者网页动态效果中。本篇文章将深入探讨如何在JavaScript中实现这个功能,以及提供相关实例和技巧。 首先,生成一个指定范围内的...

Global site tag (gtag.js) - Google Analytics