关于随机数的问题??

jerysab 2010-10-28 04:01:08
比如我现在有1到50这个50个数,每次循环我都去随机这50个数,如果判断,在随机的时候产生的数不相等?也就是说我想把这个50个数的顺序打乱,分别显示出来??怎么做???
...全文
185 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fightingthefuture 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(DateTime.Now.Millisecond);

Enumerable.Range(1, 100).OrderBy(Guid.NewGuid());
[/Quote]

我赞同这楼的
phil999 2010-10-28
  • 打赏
  • 举报
回复
大家都在自己设计算法,看来都不知道 Array.Sort 可以按照一个数组排序另一个数组
phil999 2010-10-28
  • 打赏
  • 举报
回复
如果是 net3.5+,用 linq 更方便

var q = from c in arr orderby r.Next() select c;
phil999 2010-10-28
  • 打赏
  • 举报
回复
private static void sort()
{
int[] arr = new int[] { 1 to 50 };
int[] keys = new int[arr.Length];
Random random = new Random();


for (int i = 0; i < keys.Length; i++)
{
keys[i] = random.Next();
}

Array.Sort(keys, arr); // arr 现在随机了

}
Baesky 2010-10-28
  • 打赏
  • 举报
回复
5000个数据15毫秒...不知道性能上满足楼主要求么?
Baesky 2010-10-28
  • 打赏
  • 举报
回复
修正下错误,自己测试下,发现基本不费时...

class Program
{
static void Main(string[] args)
{
DateTime dt1 = DateTime.Now;
IEnumerable<int> squares = Enumerable.Range(1, 50);
List<int> lst = new List<int>();
foreach (int i in squares)
{
lst.Add(i);
}
int[] rslt = new int[50];
Random rand = new Random();
for (int i = 49; i >= 0; i--)
{
int r = rand.Next(0, i);
rslt[i] = lst[r];
lst.RemoveAt(r);
}


Console.WriteLine("consume MilSec:" + (DateTime.Now - dt1).TotalMilliseconds.ToString());
int line = 0;
foreach (int t in rslt)
{
Console.WriteLine(line++ + ":" + t.ToString());
}
}
}
烈火蜓蜻 2010-10-28
  • 打赏
  • 举报
回复
下面的做法省掉了为数组初始化的50次循环

Random rd = new Random();
int[] a = new int[50];
for(int i=0;i<a.Length;i++)
{
int index = rd.Next(a.Length);
int tmp = a[index];
a[index] = a[i];
a[i] = tmp;
}

for(int i=0;i<a.Length;i++)
Console.Write(a[i]==0?i:a[i]);
ermuzi 2010-10-28
  • 打赏
  • 举报
回复
4楼方法不错.
jerysab 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yang_5 的回复:]
C# code

int [] number = new int[50];
for (int i = 1; i < 51; i++)
{
number[i - 1] = i;
}
Random ran = new Random();
ran.Next(0, 50);
……
[/Quote]
这样50个数都能随机出来吗???我测试了下,只能随机出大部分呢!!
Baesky 2010-10-28
  • 打赏
  • 举报
回复

IEnumerable<int> squares = Enumerable.Range(1, 50);
List<int> lst = new List<int>();
foreach(int i in squares)
{
lst.Add(i);
}
int[] rslt = new int[50]();
Random rand = new Random();
for(int i = 49; i>=0;i--)
{
int r = rand.Next(0, i);
rslt[i] = lst[r];
}
foreach(int t in rslt)
{
console.writeline(t);
}
yang_5 2010-10-28
  • 打赏
  • 举报
回复

int [] number = new int[50];
for (int i = 1; i < 51; i++)
{
number[i - 1] = i;
}
Random ran = new Random();
ran.Next(0, 50);
List<int> intList = new List<int>();
for (int i = intList.Count; i <= 50; i++)
{
int _number = ran.Next(0, 49);
if (intList.Count == 0)
{
intList.Add(number[_number]);
}
else
{
if (!intList.Contains(number[_number]))
intList.Add(number[_number]);
}
}
foreach (int item in intList)
{
this.div_1.InnerHtml += item + " , ";
}


这是我自己写的,具体的效率需要你自己完善一下
zsclyc 2010-10-28
  • 打赏
  • 举报
回复
2楼 那个没考虑效率,这样做循环太多,耗时长。。。
让爱延续 2010-10-28
  • 打赏
  • 举报
回复
随机排序一位数组


public void RandSort(int[] _num)
{
for (int i = 0; i < _num.Length - 1; i++)
{
Random rd = new Random();
int temp = rd.Next(i,_num.Length);
int tempNum = _num[i];
_num[i] = _num[temp];
_num[temp] = tempNum;
Thread.Sleep(20);//注意:引入命名空间:System.Threading;
}
}
yang_5 2010-10-28
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/99abf9270722192e4536f6b8.html
ddccqq123 2010-10-28
  • 打赏
  • 举报
回复
将1到50放到list里。然后随机1-50,取得随机数后取list[随机数]位放到结果集里,将List[随机数]移除掉,然后再随机1-49的随机数继续做~~

这个思路可不可以~
wuyq11 2010-10-28
  • 打赏
  • 举报
回复
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(DateTime.Now.Millisecond);

Enumerable.Range(1, 100).OrderBy(Guid.NewGuid());

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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