精易论坛

标题: 取不重复随机数 [打印本页]

作者: 小白弟弟    时间: 2024-7-6 19:59
标题: 取不重复随机数
本帖最后由 小白弟弟 于 2024-7-6 20:06 编辑

懒得截图了,效果大概是这样:

* 7
* 2
* 3
* 10
* 8
* 9
* 5
* 6
* 4
* 1
被调试易程序运行完毕



* 7
* 1
* 5
* 6
* 8
* 4
* 9
* 2
* 10
* 3
被调试易程序运行完毕



思路比较笨,暴力做法,时间较慢,理论支持无限大的数(转化文本就行,高精度比较麻烦,为了方便学习就没添加了)
大概讲讲思路吧,随机取随机数,判断是否出现过,真就无限循环,循环次数超过随机数范围10倍时,大概率是取不出来了(可能运气比较背,不一定标准,目前没想到更好的解决方案)
底层实现用了map(所以才可以支持无限大的数)
由于本人技术有限,不会红黑树,就转用C++写主要程序了,见谅!当然,源码也有易语言的,下面提供的压缩包就是易语言实例希望有大佬可以实现用易语言实现map,也就是红黑树,那就很方便了
取不重复随机数.zip (796.49 KB, 下载次数: 25)


想法出自本帖
取不重复随机数_精易论坛 (125.la)

速度较慢,无聊想出来的

主要dll源码
[C++] 纯文本查看 复制代码
map<int, bool> mp;
vector<int> vis;
DLLIMPORT int Rand (int L, int R)
{
        double base=((double)rand())/RAND_MAX;
        int res=L+(base*(double)(R-L+1));
        return res;
}
DLLIMPORT int __stdcall NonRepeatingRandom(int L, int R, bool clear)
{
        int cnt=0;
        
        if (clear)
        {
                for (int i=0; i<vis.size(); i++) mp[vis]=0;
                vis.clear();
        }
        
        int k=Rand(L, R);
        while (mp[k])
        {
                k=Rand(L, R);
                cnt++;
               
                if (cnt>(R-L+1)*10) return -1;
        }
        
        mp[k]=1;
        vis.push_back(k);
        
        return k;
}



作者: 小白弟弟    时间: 2024-7-6 20:03
@wuqingg        
作者: 故林    时间: 2024-7-6 20:04
支持开源~!感谢分享
作者: 笨来无一悟    时间: 2024-7-6 20:18
功德无量
作者: 艾玛克138    时间: 2024-7-6 23:19
老大出品,必属精品
作者: shuya1    时间: 2024-7-7 02:27
支持开源~!感谢分享
作者: ZHuanR    时间: 2024-7-7 07:13
新技能已get√
作者: 查过    时间: 2024-7-7 07:17
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 豆豆灰常开心    时间: 2024-7-7 07:22
下个学习一下
作者: year1970    时间: 2024-7-7 08:35
感谢分享
作者: 一指温柔    时间: 2024-7-7 08:50
感谢分享
作者: yuzhong    时间: 2024-7-7 10:32
2222222222222222222222
作者: 396384183    时间: 2024-7-7 15:07

支持开源~!感谢分享
作者: bianyuan456    时间: 2024-7-7 19:22
已经顶贴,感谢您对论坛的支持!
作者: APPLEUFO    时间: 2024-7-7 21:44
生成一个不重复数组,然后每次随机取一个,不就是不重复随机数了
作者: 查过    时间: 2024-7-8 07:29
感谢楼主分享!
作者: 豆豆灰常开心    时间: 2024-7-8 07:33
全都是大佬~
作者: 光影魔术    时间: 2024-7-8 10:02
感谢分享源码
作者: 灰度:My    时间: 2024-7-8 17:58
感谢楼主分享!
作者: renhe2018    时间: 2024-7-9 06:04
一看就是个很实用的案例
作者: please    时间: 2024-7-9 09:39
感谢分享,支持开源!!!
作者: Q3375840759    时间: 2024-7-17 10:56
66666666666666666666666666666666666666666
作者: 564123    时间: 2024-8-1 10:41
        支持开源~!感谢分享
作者: aa6536    时间: 2024-8-4 21:54
        支持开源~!感谢分享
作者: 熊不熊    时间: 2024-12-5 01:25
感谢分享,很给力!~
作者: lyjzyq    时间: 2024-12-14 18:58
6666666666666666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4