C语言保证每次随机值唯一算法实例

使用缓存保证1~n每次输出的随机数不一样,代码比较短,思路直接见代码

 代码如下 复制代码
// copyright (c) cguage.com
// e-mail:tangcraig@gmail.com
// date:  2014-1-21
 
#include <iostream>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std;
 
int main() {
    map<int, int> arr;
    int num = 10;
    srand(time(0));
 
    for (int i = 0; i < 10; ++i) {
        int idx = (num > 0 ? rand() % num : 0);
        cout << (arr.find(idx) == arr.end() ? idx : arr[idx]) << endl;
        --num;
        arr[idx] = (arr.find(num) == arr.end() ? num : arr[num]);
    }
 
    return 0;
}

虽然些实例是用C语言实现的,但是此算法可以应用于C#, java, php等编程语言。

时间: 2024-08-01 15:02:16

C语言保证每次随机值唯一算法实例的相关文章

Go语言实现的树形结构数据比较算法实例_Golang

本文实例讲述了Go语言实现的树形结构数据比较算法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: // Two binary trees may be of different shapes, // but have the same contents. For example: // //        4               6 //      2   6          4     7 //     1 3 5 7       2   5 //          

PHP随机生成唯一HASH值自定义函数_php技巧

网上有很多种方法获取随机唯一的HASH值,但是大同小异: 1.先获取随机的唯一字符串 2.进行MD5或者sha1算HASH值 一个项目要用到hash值,就去网上找了找,却发现PHP有一个函数能直接生成唯一字符串--uniqid(),通过使用这个函数,再加上自己生成的随机数(防止被破解),更具有唯一性且不易被猜解.主要考虑问题如下: 1.随机的效率与随机性:rand和mt_rand函数的选择,首选mt_rand,效率高,随机性好: 2.随机次数:选择5次,本来unniqid就是唯一的,加上随机的可

《数据结构与算法:Python语言描述》一1.3算法和算法分析

1.3算法和算法分析 本节集中讨论算法的问题,特别是算法的性质及其分析技术. 1.3.1问题.问题实例和算法 在考虑计算问题时,需要清晰地区分问题.问题实例和算法三个概念,并理解它们之间的关系,这就是本小节讨论的内容.三个基本概念考虑一个计算问题时,需要注意到三个重要概念:问题:一个问题W是需要解决(需要用计算求解)的一个具体需求.例如判断任一个正整数N是否为素数,求任一个方形矩阵的行列式的值等.虽然可以严格定义"问题"的概念,但在这里还是想依靠读者的直观认识.总而言之,现实世界中存在

JS随机洗牌算法之数组随机排序_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列.举例来说,我们有一个如下图所示的数组,数组长度为 9,数组内元素的值顺次分别是 1~9: 从上面这个数组入手,我们要做的就是打乱数组内元素的顺序: 代码实现 维基百科上的 Fisher–Yates shuffle 词条对洗牌算法做了详细介绍,下面演示的算法也是基于其中的理论编写的: A

C C++ 算法实例大全_C 语言

C C++,算法实例 一.数论算法   1.求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer; begin if a<b then swap(a,b); lcm:=a; while lcm mod b>0 do inc(lcm,a); end; 3.

Swift语言指南(六)--可选值

原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值  注: 在 C 和 Objective-C 中可选值的概念并不存在.Objective-C 中(与可选值)最相近的(概念)是,一个以对象为返回值的方法,也可以返回 nil,nil表示"不存在有效的对象".不过,这规则只对对象有效--对于结构.基本的 C 类型或枚举值无效.对于这些类型,Objective-C 语言的方法通常会

K-均值聚类算法的种群初始化

问题描述 K-均值聚类算法的种群初始化 K-均值聚类算法的种群初始化时候,java代码里面,怎么加入预先设定好的2维数组,而不是随机生成?拜托各位大神了,马上就要交毕业设计,答辩了.拜托拜托. 解决方案 K-均值聚类算法K-均值聚类算法K-均值聚类算法 解决方案二: package org.algorithm; import java.util.ArrayList; import java.util.Random; /** * K均值聚类算法 */ public class Kmeans { p

R语言 决策树和随机森林 回归分析

[R语言进行数据挖掘]决策树和随机森林 1.使用包party建立决策树 这一节学习使用包party里面的函数ctree()为数据集iris建立一个决策树.属性Sepal.Length(萼片长度). Sepal.Width(萼片宽度).Petal.Length(花瓣长度)以及Petal.Width(花瓣宽度)被用来预测鸢尾花的 Species(种类).在这个包里面,函数ctree()建立了一个决策树,predict()预测另外一个数据集. 在建立模型之前,iris(鸢尾花)数据集被分为两个子集:训

c语言 判断输入的值是否为浮点数

问题描述 c语言 判断输入的值是否为浮点数 如题 1.可能输入字符串2.可能输入ip地址 自己试着做了一下,但是输入ip地址(如1.1.1.1)的时候往往忽略第二个小数点后的内容,直接显示输入正确求教 解决方案 他们的回答好复杂啊,你可以把整个当成一个字符串,然后以 . 截取,然后判断是否能转成数字类型,能就是ip不能就包含字符创 解决方案二: 浮点数可以由以下的正则表达式确定:white_space_opt [[:space:]]*digit_sequence [[:digit:]]+frac