#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之间的随机数,把这两个数所表示下标的数交换位置,如此重复几十次,原先的数组就被打乱了。*/
相关推荐
VB生成不重复的随机数 我的建议是:第一步、先做一个数组,存上这35个数(可以不是连续的数,也可以是人名、字符串什么的);第二步、随机生成一个1-35之间的数,输出;第三步:把这个数和数组的第一个单元交换;第...
VBA生成不重复的随机数源码.txt
多种生成不重复随机数的java 源代码,在线考试系统组卷系统中若需要随机抽题技术,这些代码可能会帮上忙!
VB.NET生成不重复的随机数源程序。 VB.NET生成不重复的随机数源程序。
生成指定随机数不重复的例子(解压,放到myeclipse即可用)
Java生成32位随机数,短位随机数工具类
随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法...
1. 设计并实现一个随机数生成电路,每2秒随机生成一个0~999之间的数字,并在数码管上显示生成的随机数。2. 为系统设置一个复位键,复位后数码管显示“000”,2秒后再开始每2秒生成并显示随机数,要求使用按键复位。
java生成16位随机数
利用matlab,生成柯西分布随机数,原理、代码,一键生成
自动生成随机数,然后分别用冒泡、选择、快速排序来输出排序结果。代码中还可以输出每一步的排序结果供分析
通过循环创建随机种子来循环生成随机数,避免了重复调用Random的Next方法产生重复随机数的问题,程序里可设置文件的保存路径和产生的随机数长度
Java简易随机数生成 下载完请输入测试代码 public static void main(String[] args) { System.out.println(random(50,100));//example System.out.println(random(50.0,100.0)); }
巧用Java实现得到任意位永不重复的随机数,很经典的代码!
易语言取不重复随机数源码,取不重复随机数
代码如下:Randomize ‘纯随机,不重复 Response.write Int((999999999 * Rnd) + 111111111) ‘生成111111111到999999999之间随机数 ASP不重复随机数:方法一: 已测使用的时候需要注意里面的分割字符串的字符。 代码...
.NET生成不重复的随机数,源文件..常用的设置
VB.NET生成1-10不重复随机数.重点是生成随机数,而且不重复。
java生成十个不重复的随机数,要求不重复
C++随机数生成(无关联随机数也包括伪随机数的生成)