从0到9的10个数字中随机生成一串随机数,每次生成绝对不一样

skymelai 2009-06-05 04:19:56
从0到9的10个数字中随机生成一串随机数,每次生成绝对不一样
和之前有人提出的问题有点不一样,现在要的结果是
如:
1234 3208 9709 7897
3210 3289 0889 0987
3233 0993 0932 0183
......

每次生成1000个这样的数,但必须和保证这次生成的数和以前生成的数绝对
不一样.

不知道各位有什么好的方法吗?
...全文
2121 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
butwang 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ibone 的回复:]
或者极端方法,空间换时间

定义个变态数组 array[9999 9999 9999 9999]

初始话置0;

生成一个随机数 x 后 判断array[x] 是否为1 ,为1重新生成,不为1 置1;

如果随机数不是变态的大,这样效率非常高

[/Quote]

这个数组貌似不会得逞
hmlog 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 faireprogram 的回复:]
其实这就是洗牌问题撒.
以前我写的21点代码中的原程序.你可以参考下.希望对你有帮助
Java code//洗牌,开局洗牌```````````````````````````````````````````````````publicvoid xipai()
{int i,j,n;for(i=0;i<=51;i++)
{
t[i]=i+1;
}//建立数组t为洗牌的数组 Random r=new Random();for(i=0;i<=51;i++)
{
n=51-i;if(n!=0)j=r.nextInt(n+1);else j=0;
p[i]=t[j];for(;j<n;j++)
t[j]=t[j+1];
}//用p来接受t所洗的牌。并且将洗好的牌放入p中;
[/Quote]
APOLLO_TS 2009-06-13
  • 打赏
  • 举报
回复
分少点呀!!

数据空间程序结构
但是不是存储结构,只是一个AD假设。
{
(3)()()()
()(2)()()
()()(1)()
()()()(0)
}
采用一维数组保存
temp[]={3,2,1,0}
它表示---temp[0]=3 一行一列的元素是3 temp[1]=2二行二列的元素是3
生成数列(列阵n){
for(空间列阵循环){
判断生成数字{
已经保存的数字不能冲突
如果集合是{3,2,1}那么第四个不能是 3,2,1
}
如果判断通过-->调用[生成数列(n+1)];
}
}
-----------------------------------------------------
当个随机不重复主要算法!
生成多个随机数字后!
采用set--hashTable
以key-key 添加
如果生成量<1000----继续生成。

-----------------------------------------------------
如果对随机要求不高,直接生成随机值,添加到hashTable就可以了!直到1000
爱雪一万年 2009-06-12
  • 打赏
  • 举报
回复
看下
swimmer2000 2009-06-12
  • 打赏
  • 举报
回复
所有可能组合存在数组中,每次从数组中随机选一项,并把选出项从数组中删除。
amwalvinja 2009-06-11
  • 打赏
  • 举报
回复
没可能。。数就是这几个。肯定会有相同一天。
ianbj 2009-06-11
  • 打赏
  • 举报
回复
Random ran=new Random();


List result = new ArrayList();
while(result.size()<=1000){
String base = "0123456789";
String temp = "";
for(int j = 0 ; j < 4 ; j++){
temp += base.subString(ran.nextInt(base.Length()),1);
base.Remove(base.indexOf(temp));
}
if(temp!=""&&!result.contains(temp)){
result.add(temp);
}
}

语法 可能 有 手写失误
请验证更改
newdigitime 2009-06-10
  • 打赏
  • 举报
回复
Random()不是很简单吗.
seaman_xh 2009-06-10
  • 打赏
  • 举报
回复
把10选4的所有排列保存到一个数组中,
然后生成无重复随机下标1000次
nnull 2009-06-10
  • 打赏
  • 举报
回复
生成所有10选4组合 随机乱序之~~~~
wangbi1988 2009-06-10
  • 打赏
  • 举报
回复
可以考虑生成后进行排序吧。
xiedu414 2009-06-08
  • 打赏
  • 举报
回复
建议楼主不要单纯的想只靠随机解决,如果都这么简单,大家不如
回家种地吧。
skymelai 2009-06-08
  • 打赏
  • 举报
回复
我还想问下,如果我用GUID的话,是否每次生成的GUID都是唯一的呢?
skymelai 2009-06-08
  • 打赏
  • 举报
回复
兄弟,还是不太明白你的意思,能否用程序语言描述一下呢??
ibone 2009-06-08
  • 打赏
  • 举报
回复
或者极端方法,空间换时间

定义个变态数组 array[9999 9999 9999 9999]

初始话置0;

生成一个随机数 x 后 判断array[x] 是否为1 ,为1重新生成,不为1 置1;

如果随机数不是变态的大,这样效率非常高
ibone 2009-06-08
  • 打赏
  • 举报
回复
主要是去重的时候费时,不知这样比较可不可以
array[1000][n][16-n]
先比较前n个数,相同在比较后 16-n
pstrunner 2009-06-08
  • 打赏
  • 举报
回复
用随机函数Random()产生的结果按照一定的处理生成你所需要的4位整数,这样因为随机函数生成的数,经过一定处理,还是随机数。不知道这方法是否可行?
faireprogram 2009-06-07
  • 打赏
  • 举报
回复
我简单说明一下思路

如果要将随即产生1~N个不重复的数的解决方案.
第一步:建立一个数组Source[N],Source[N]中存放1~N;
第二步:建立一个Random 对象r.每次调用r.nextInt(n);(产生0~n,任意随机数);
第三步:建立另一个数组Dest[N]用来存放最终结果数据.
现在我来演示一下基本过程
第一个数:t.NextInt(N)产生了1个0~N之间的任意数Index.我们将Source[Index]的值-->Dest[0].
Source[Index]后面的数据前移.此时Source中有效数据个数是N-1;

第二个数:t.NextInt(N-1)产生了1个0~N-1之间的任意数Index.我们将Source[Index]的值-->Dest[1].
Source[Index]后面的数据前移.此时Source中有效数据个数是N-2;

第n个数:t.NextInt(N-n)产生了1个0~N-n之间的任意数Index.我们将Source[Index]的值-->Dest[n].
Source[Index]后面的数据前移.此时Source中有效数据个数是N-n;
faireprogram 2009-06-07
  • 打赏
  • 举报
回复
其实这就是洗牌问题撒.
以前我写的21点代码中的原程序.你可以参考下.希望对你有帮助

//洗牌,开局洗牌```````````````````````````````````````````````````
public void xipai()
{
int i,j,n;
for(i=0;i<=51;i++)
{
t[i]=i+1;
}//建立数组t为洗牌的数组
Random r=new Random();
for(i=0;i<=51;i++)
{
n=51-i;
if(n!=0)j=r.nextInt(n+1);
else j=0;
p[i]=t[j];
for(;j<n;j++)
t[j]=t[j+1];
}//用p来接受t所洗的牌。并且将洗好的牌放入p中;
supesa 2009-06-07
  • 打赏
  • 举报
回复
前4位用作版本号,1,2,3,4.。。。。排下去,剩下的数据自动生成,这样每次不用和以前的比对啦。速度就有保障啦。
至于生成1000个不一样的数,方法就多了。1000个数比较少,连排序都不用。最朴实的就是一个个生成,然后查找是否在集合中,不在就插入。在了重新生成,集合满10000就ok了。
加载更多回复(11)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧