/*
*产生 0~n-1 范围内的 m 个随机整数的有序列表,且不允许重复,m <= n
*注:参考<<Programming Pearls>>一书
*/
#include <iostream>
#include <set>
#include <ctime>
#include <algorithm>
using namespace std;
//产生较大的随机数
int bigrand()
{
return RAND_MAX*rand()+rand();
}
//随机返回m,n之间的整数。
int randint(int m,int n)
{
return (n-m)*rand()/RAND_MAX+m;
}
///从0 -- n-1中随机选m个数;
void method1(int n,int m)
{
srand(time(NULL));
int i;
for(i=0;i<n;i++)
{
if((bigrand()%(n-i))<m)
{
cout<<i<<endl;
m--;
}
if(m==0)
{
return;
}
}
}
//利用C++STL实现,时间复杂度mlog(m).
void method2(int n,int m)
{
set<int> S;
while(S.size()<m)
{
S.insert(bigrand()%n);
}
set<int>::iterator i;
for(i=S.begin();i!=S.end();i++)
{
cout<<*i<<endl;
}
}
//弄乱这n个数,再取前m个数排序
void method3(int n,int m)
{
srand(time(NULL));
int i,j;
int *x=new int[n];
for(i=0;i<n;i++)
x[i]=i;
for(i=0;i<m;i++)
{
j=randint(i,n-1);
int t=x[i];x[i]=x[j];x[j]=t;
}
sort(x,x+m);
for(i=0;i<m;i++)
{
cout<<x[i]<<endl;
}
}
void main()
{
// method1(1234,25);
// method2(1234,25);
method3(1234,25);
}
相关推荐
一个简单的产生随机数并冒泡排序的算法
一个简单的产生随机数并冒泡排序的算法小程序算法, 解决方案和程序
输入两个整数m和n,输出0~n-1范围内m个随机整数的有序列表,不允许重复
方法一:Knuth 时间复杂度O(n) 1 void genknuth(int m,int n){ 2 for(int i=0;i<n;i++){ 3 if(bigrand()%(n-i)<m){ 4 cout<<i<<endl; 5 m--; 6 ...
基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战解析
本文详细解析了基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战方案。从环境搭建、驱动安装、双雷达配置、外参标定、时间同步到点云融合核心实现,全面介绍了技术要点与避坑指南,并提供了工程化部署与性能优化建议,助力开发者高效实现高精度点云合成应用。
生成0~n-1内的m个随机整数的四种算法
生成0~n-1内的m个随机整数的四种算法 方法一: knuth的算法,例如n=5, m =2, 那么选第一个元素的概率就是2/5,如果选上了那么选第二个元素概率就是1/4,否则选择第二个元素的概率就是2/4 void gen_knuth(int n, int m) { for(int i = 0; i < n; i ++) { if(big_rand()%(n-i) < m)
tanner2019安装教程
tanner2019安装教程 tanner安装包 软件由老师提供,但由于老师给的方法不知怎么回事无法使用就自己找了一些方法,本教程仅提供参考 链接:https://pan.baidu.com/s/1A2O6JuEF8YFbe8bPnD3J6w 提取码:ysif 复制这段内容后打开百度网盘手机App,操作更方便哦 安装过程 1.选择TannerTools_v2019.2-Win64.exe,进行安装。 2.选择安装产品 3.选择目标路径 4.确认安装 5.安装成功,退出。 获取许可过程 1.打开key压缩
技术解析:ChangeFormer——基于Transformer的孪生网络在遥感变化检测中的创新应用
本文深入解析了ChangeFormer模型在遥感变化检测中的创新应用,该模型基于Transformer架构和孪生网络(Siamese Network),显著提升了变化检测的精度和效率。通过详细的技术实现和实战经验分享,展示了其在建筑物变化、森林监测等场景中的卓越表现,为相关领域的研究和应用提供了有力工具。
给定1到N的随机数函数,产生1到M的随机数
给定能随机生成整数 1 到 n 的函数,写出能随机生成整数 1 到 m 的函数(m > n)。 设 n = 5, m = 7 关键是让生成的 1 到 7 的数出现概率相同。调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置,直到剩下最后一个。如: 初始的 7 个数 [1, 2, 3, 4, 5, 6, 7]。 (1)7 个 1 到 5 的随机数,如 [5,
保姆级教程:用+86手机号成功注册Discord的三种亲测方法(附节点选择技巧)
本文提供了三种经过验证的方法,帮助用户使用+86手机号成功注册Discord,包括号码格式调整、网络环境优化和设备组合方案。同时详细解析了'手机号无效'报错的深层原因,并附上节点选择技巧,确保注册流程顺利。
设计一个随机算法,将一个整数M分成N个整数 要求每个都在区间【minV, maxV】之间
设计一个随机算法,将一个整数M分成N份 要求每份在区间【minV, maxV】之间 输入:M, N, minV, maxV 输出: N个随机整数 举个栗子: 比如:N = 10 M = 3 minV = 2 maxV = 4 那么输出是 [2, 4, 4] [3, 3, 4] [4, 2, 4]......等每次运行的输出结果不一样,满足随机性 import ran...
20、基于图神经网络的脱氢焓预测方法研究
本文研究了基于图神经网络(GNN)的液态有机氢载体(LOHC)材料脱氢焓预测方法。通过分析现有GNN方法的局限性,提出了一种新的聚合自节点表示(AWS)方法,并结合丰富的原子特征和集成学习策略,显著提高了预测性能。实验结果表明,AWS在脱氢焓预测和多个基准化学性质预测任务中均优于现有GNN方法。此外,基于分子结构的集成方法进一步提升了模型的鲁棒性和准确性。研究展示了该方法在筛选LOHC材料中的潜力,并为未来预测更多化学性质奠定了基础。
Autosar CAN 网络管理标准文档
Autosar CAN 网络管理标准文档
生成等概率
http://blog.youkuaiyun.com/hackbuteer1/article/details/7486748 题目:已知随机函数rand(),以p的概率产生0,以1-p的概率产生1,现在要求设计一个新的随机函数newRand(), 使其以1/n的等概率产生1~n之间的任意一个数。 解决思路:可以通过已知随机函数rand()产生等概率产生0和1的新随机函数Rand(),然后调用k(k
Autosar诊断实战系列23-NRC优先级解析
NRC分类,优先级判断逻辑及测试注意事项介绍。
给定等概率随机产生1~M的随机函数, 实现等概率随机产生1~N的随机函数
/** * Created by lxw, liwei4939@126.com on 2017/10/27. * 给定一个等概率随机产生1~M的随机函数,实现等概率随机产生1~N的随机函数 */ public class RandomConvert { public int rand1ToM(int m){ return (int) (Math.random()*m
C# + NAudio:构建支持实时音频处理的语音聊天应用(含回声消除)
本文介绍了如何利用C#和NAudio库开发实时语音聊天应用,重点实现回声消除功能。首先概述了NAudio库在音频处理中的作用,包括音频录制、播放和实时处理能力。然后详细讲解了构建基础语音聊天应用的过程,包括麦克风录制和扬声器播放的实现。接着深入探讨了回声消除的原理和实现方法,提出通过比较麦克风输入和扬声器输出的音频信号来消除回声,并给出了核心代码示例。最后,文章还讨论了性能优化方向,如多线程处理和网络传输扩展。该方案为开发高质量实时语音应用提供了实用参考。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
等概率随机函数的实现
题目:已知随机函数rand(),以p的概率产生0,以1-p的概率产生1,现在要求设计一个新的随机函数newRand(), 使其以1/n的等概率产生1~n之间的任意一个数。 解决思路:可以通过已知随机函数rand()产生等概率产生0和1的新随机函数Rand(),然后调用k(k为整数n的二进制表示的位数)次Rand()函数,得到一个长度为k的0和1序列,以此序列所形成的整数即为1--n之间的数字。注
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
经典面试题目 从5随机到7随机及其扩展
给定一个等概率随机产生1~5的随机函数如下 public int rand1To5(){ return (int)(Math.random()*5) + 1; } 除此之外不能使用任何的随机机制,请实现等概率的产生1~7的随机数rand1To7() 解: rand1To5() 等概率的随机产生1,2,3,4,5 rand1To5()-1 等概率的随机产生0,1,2,...
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
博客总结八——1M内存排序1000w整数
前提:每个整数互异 解决:位图排序 代码:
C语言复现Matlab的randperm(N,M)函数,产生不重复的随机整数
randperm产生不重复的随机整数序列
随机生成0~N之间的N个不重复整数
洗牌算法(From 《编程珠玑》): #defineN10000000voidswap(int*i,int*j){inttemp=*i;*i=*j;*j=temp;}int*RandInts(){int*n=(int*)malloc(N*sizeof(int));for(inti=0;i<N;i++)n[i]...
matlab逆变换法产生随机数_[原创]Matlab 生成随机数
Matlab 中有着丰富的随机数生成函数以应用于不同的情景,我一般使用生成随机的 1~N 的整数,但是之前了解的只有 rand 函数,其生成主要为 0 ~ 1 之间的随机数,但是和所预想的有差异。在此进行进行了help 指令,之后了解到了 randi 函数,并初步学会使用,在此做一个记录。rand 函数rand 函数是生产 0 ~ 1 的随机数,rand(N) 为生产一个 N 行 N 列的随机数矩...
#随机数#产生1~n之间的随机数
经常用的就是一个rand函数~然后srand获得种子。暂时不想太深入的研究,给个最常用的的东西,就ok了~! 用srand和rand获得在1~n之间的数据。 #include #include using namespace std; int main() { int n = 8; srand((int)time(0)); int num = 1+ ra
随机题
-------------------------------------------------------------- 程序的输入为两个整数m和n,m<n。要输出0~n-1范围内的m个随机整数的有序列表,m个整数不允许重复。这个题目来自<编程珠玑>。 解法1: 因为要求序列有序,那么我们可以依序对0到n-1的每一个数做决策:输出还是不输出?很显然每个数...
如何构造另一个随机生成函数?
昨天下午面搜狐的时候被问到了构造随机数生成函数的问题,事后觉得有必要归纳一下相关题型。 1.已知随机数生成函数randA能等概率生成0~n的整数,设计一个等概率生成0~m的randB 算法: 若n大于m,则直接利用randA随机产生的数作为randB,如果randA产生的数大于m则丢弃这个数,重新产生,直至成功。若n远大于m,则只需构造最大值为m*(n/m)的随机函数randC,然后丢弃ran
0 .. n-1个数中随机选m个数
给定一个n, 一个m, 要求从0..n-1个数中随机选取m个数。 这里参考《编程珠玑》中的一个方法,既利用概率测试来进行选取。假设我们要从0到100中选取10个数。首先考虑0,我们选取它的概率为10/100 = 1/10,因此我们可以产生一个随机数(应该远远大于n),利用该数模100的值是否小于10来模拟选取0的情况。接着考虑1,这时我们应该根据0是否被选取来考虑其被选中的概率。 ...
随机抽样算法
问题描述: 程序的输入包含两个整数m和n,其中m void GenerateKnuth(int m,int n) { int t=m; for(int i=0;i<n;i++) if(Rand(0,n-1-i)<t)//即以t/(n-i)的概率执行下面的语句 { printf("%d\n",i); t--; } } 其中Rand(a,b)随机产生[a
769



被折叠的 条评论
为什么被折叠?



