24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1879  |  回复: 14
当前主题已经存档。

yy5393

金虫 (小有名气)

[交流] 【求助】如何生成没有重复的随机数

我想在1-2500之间生成200个没有重复的随机数,我编了好长时间都不对,哪位虫友知道指点一下或者有类似的程序分享一下,真是不胜感激啊!
回复此楼

» 猜你喜欢

伟大都是熬出来的!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woshilsh

荣誉版主 (职业作家)

优秀版主


sunxiao(金币+1,VIP+0):不要不行,呵呵 4-2 23:21
不要BB,呵呵,兄弟在Fortran下生成随机数?

想不重复,你可以找出重复的,剔除,然后把不重复的加进去,咋样?

方法笨了点,但有效哇!
[center][url=http://www.91cool.net/][img]http://id.91cool.net/sign/?name=小木虫印&say=各位版主辛苦了![/img][/url][/center]
2楼2009-04-02 22:17:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

windhair

铜虫 (小有名气)

★ ★ ★ ★
sunxiao(金币+3,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-2 23:21
yy5393(金币+1,VIP+0):谢谢 4-3 16:07
要生成不同随机数,就要改变seed, 而要seed 不同,最简单的方法就是用系统时间做seed
F90 里有现在生成seed的函数吧,查查
3楼2009-04-02 22:36:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lynarcissusly

金虫 (正式写手)


yy5393(金币+1,VIP+0):我试试 4-3 16:07
程序里不是有自带的随机数产生器吗?ran(iseed). iseed是整数,这样产生的随机数是0-1之间的,你自己把它乘以2500就可以了。
4楼2009-04-03 14:10:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)

★ ★
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来仿真编程版 4-13 22:23
这是我想到的方法,以100个中取10个为例,用MATLAB搞的
>> a=rand(1,11)'

a =

    0.6813
    0.3795
    0.8318
    0.5028
    0.7095
    0.4289
    0.3046
    0.1897
    0.1934
    0.6822
    0.3028

>> a=cumsum(a)

a =

    0.6813
    1.0608
    1.8926
    2.3954
    3.1048
    3.5337
    3.8383
    4.0280
    4.2214
    4.9037
    5.2064

>> a=a.*100./a(end)

a =

   13.0853
   20.3740
   36.3504
   46.0079
   59.6348
   67.8726
   73.7234
   77.3660
   81.0813
   94.1848
  100.0000

>> a=round(a)

a =

    13
    20
    36
    46
    60
    68
    74
    77
    81
    94
   100

>> a=a(1:end-1)

a =

    13
    20
    36
    46
    60
    68
    74
    77
    81
    94

>>
5楼2009-04-12 23:23:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)

★ ★
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来仿真编程版 4-13 22:24
还可以在生成随机数后每个值都加上一个常数,来保证间隔,比如说间隔不小于6,不过这地方要算一下,我想应该是能做到的,就是说在第一步生成随机数后加上一步
>> a=rand(1,11)'

a =

    0.5298
    0.6405
    0.2091
    0.3798
    0.7833
    0.6808
    0.4611
    0.5678
    0.7942
    0.0592
    0.6029

>> a(2:end-1)=a(2:end-1)+0.2
a =

    0.5298
    0.8405
    0.4091
    0.5798
    0.9833
    0.8808
    0.6611
    0.7678
    0.9942
    0.2592
    0.6029
这个加上的值怎么调还要算一下,我忽然想到的,不知对不对

[ Last edited by fspdlh on 2009-4-13 at 00:16 ]
6楼2009-04-12 23:30:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)


sunxiao(金币+1,VIP+0):谢谢参与,欢迎常来仿真编程版 4-13 22:24
我算了一下,如果1到M之间插入n个数,间隔不小于d,那么另外加的这个数可以按下式计算:
t=d*(n+1)/(2*(M-d*n+d))
因为
t*M/(sum(a)+t*n-t)=d
其中sum(a)为各随机数的总和,约等于0.5*(n+1),从这里也可看出,插入的数据越多该计算式越准确。
不知对不对,请高手指正!

[ Last edited by fspdlh on 2009-4-13 at 00:25 ]
7楼2009-04-13 00:04:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)

★ ★
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来仿真编程版 4-13 22:25
这是从0到100之间生成10个间隔大于5的随机数
>>  M=100

M =

   100

>> n=10

n =

    10

>> d=5

d =

     5

>> t=d*(n+1)/(2*(M-d*n+d))

t =

    0.5000

>> a=rand(1,11)'

a =

    0.9501
    0.2311
    0.6068
    0.4860
    0.8913
    0.7621
    0.4565
    0.0185
    0.8214
    0.4447
    0.6154

>> a(2:end-1)=a(2:end-1)+0.5

a =

    0.9501
    0.7311
    1.1068
    0.9860
    1.3913
    1.2621
    0.9565
    0.5185
    1.3214
    0.9447
    0.6154

>>  a=cumsum(a)

a =

    0.9501
    1.6813
    2.7881
    3.7741
    5.1654
    6.4275
    7.3840
    7.9025
    9.2239
   10.1686
   10.7840

>>  a=a.*100./a(end)

a =

    8.8105
   15.5904
   25.8541
   34.9971
   47.8987
   59.6021
   68.4714
   73.2795
   85.5329
   94.2931
  100.0000

>> a=round(a)

a =

     9
    16
    26
    35
    48
    60
    68
    73
    86
    94
   100

>> a=a(1:end-1)

a =

     9
    16
    26
    35
    48
    60
    68
    73
    86
    94

>>

[ Last edited by fspdlh on 2009-4-24 at 09:20 ]
8楼2009-04-13 00:23:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)

sunxiao(金币+0,VIP+0):迟来的金币,呵呵 4-13 22:25
顶一下,呵呵
9楼2009-04-13 17:36:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duyingchun

银虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
#include
#include

char RandomData[2500];
int   ActureData[200];

void InitData()
{
memset(RandomData,0,2500);
}

void CreatData()
{
int Num=0;
int Data;
while(Num<200)
     {
      Data=random(2500);
      if(RandomData[Data])   continue;
      RandomData[Data]=1;
      ActureData[Num++]=Data;
     }
}

void main()
{
randomize();
InitData();
CreateData();
}

200个随机数字存在ActureData数组里,没有排过序,如果需要排序的话,修改下CreateData函数如下:
void CreateData()
{
int Num=0,index=0;
int Data;
while(Num<200)
     {
      Data=random(2500);
      if(RandomData[Data])   continue;
      RandomData[Data]=1;
      Num++;
     }

Num=0;

while(index<200)
     {
      if(RandomData[Num])  ActureData[index++]=Num;
      Num++;
     }
}

[ Last edited by duyingchun on 2009-6-1 at 14:14 ]
10楼2009-06-01 14:03:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yy5393 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 博士申请 +4 星…… 2026-05-18 5/250 2026-05-18 17:34 by 炎甲00
[文学芳草园] 半夜喝咖啡 +3 myrtle 2026-05-15 5/250 2026-05-18 01:03 by 小沈2018
[找工作] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 ky2p12rrjj 2026-05-15 4/200 2026-05-17 19:47 by Equinoxhua
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 xx7gd5zq4e 2026-05-15 6/300 2026-05-17 19:36 by Equinoxhua
[考博] 26/27博士推荐 +3 1木头人13949 2026-05-13 3/150 2026-05-17 09:41 by YuY66
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 v9tggjlwd0 2026-05-15 4/200 2026-05-17 08:11 by 11n4dfd8yn
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 l7k6xnh0yc 2026-05-14 8/400 2026-05-17 07:26 by 11n4dfd8yn
[公派出国] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +6 l7k6xnh0yc 2026-05-14 6/300 2026-05-17 07:16 by 11n4dfd8yn
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +5 cjf4bx70cj 2026-05-14 7/350 2026-05-17 06:55 by 11n4dfd8yn
[找工作] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 k37jurhrau 2026-05-16 3/150 2026-05-17 01:37 by ue3ir18jc3
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 k37jurhrau 2026-05-16 3/150 2026-05-17 01:25 by ue3ir18jc3
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 ky2p12rrjj 2026-05-15 4/200 2026-05-17 00:57 by ue3ir18jc3
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 ky2p12rrjj 2026-05-15 3/150 2026-05-17 00:45 by ue3ir18jc3
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 k37jurhrau 2026-05-16 3/150 2026-05-16 13:57 by vcdazktkjx
[硕博家园] 申请博士 +3 呃?呃 2026-05-15 3/150 2026-05-16 11:01 by a4742549
[文学芳草园] 风把牡丹吹跑了 +5 myrtle 2026-05-12 9/450 2026-05-15 15:27 by myrtle
[教师之家] 教学课件你会给同学吗 +8 硕士研究生吗 2026-05-13 8/400 2026-05-14 22:23 by 常规沥青
[考博] 26应届毕业生考博求助 +3 wo一定上岸 2026-05-13 3/150 2026-05-14 21:47 by 明海天涯
[考博] 材料类只有一篇综述能申博么 +4 乐逍遥谷 2026-05-13 4/200 2026-05-14 12:05 by zhyzzh
[论文投稿] 求助大佬sci投稿哪个好中 +3 江沅188 2026-05-12 4/200 2026-05-13 14:35 by 江沅188
信息提示
请填处理意见