急急, c#产生随机数,一到一百的不重复的

如题所述

Random random = new Random();
int[] array = new int[要生成的随机数个数];
for(int i = 0; i < array.Length; i++)
{
int x = Convert.ToInt32(random.Next(1, 100));
for(int j = 0; j < i; j++)
{
if(x == array[j])
{
x = Convert.ToInt32(random.Next(1, 100));
j = 0;
}
}
array[i] = x;
}追问

输出哪个值啊

追答

什么输出哪个值,生成的不重复的1到100的数都在array数组里啊。

追问

我想在页面输出一个数字,每次随机产生的都不同,

追答

你的意思是每打开一次界面都仅输出一次?并且要求第二次打开界面生成的数字跟第一次打开界面生成的数字不一样?

追问

就打开一次页面,有按钮的保证每次点按钮不一样就行了

追答

哦,那你就把for循环去掉,直接生成,然后像我上面写的那样存在数组里,第二次点按钮时生成一个新的,并与之前数组里已经存好的做比较,不重复就显示出来并存在数组里,重复的话就重新生成一个。

追问

我改了不好用啊 !!求 在帮改改 谢了

追答

//由于并不能确定界面打开之后最多会被点击多少次按钮,也就不知道最多会生成多少次随机数,所以这里我考虑用一个字符串来记录每次生成的随机数,并且相邻两次的随机数之间用逗号来分隔。
string outPut = string.Empty;//全局变量,千万别写在生成随机数的按钮的Click事件里。

private void button3_Click(object sender, EventArgs e)
{
Random random = new Random();
int x = Convert.ToInt32(random.Next(1, 100));//生成一个1到100的随机数
string[] array = outPut.Split(',');//将之前已生成的随机数以逗号作为分隔符来拆分成一个数组,为了方便,string类型。

//因为没有做过多的判断,所以当你点击页面上的按钮第101次的时候,array的长度正好是101,第一个元素是""。由于此时无论生成的数字是多少,下面都会陷入死循环,这时候要提示用户,不能继续操作了。
if (array.Length == 101)
{
//提示用户:此页面已经无法再次生成1到100之间不重复的随机数了。
return;//刚才忘了加return了,哈哈。
}

for (int i = 0; i < array.Length; i++)
{
if (x.ToString() == array[i])//如果刚生成的x与之前已生成的任意一个数相等,则重新生成x
{
x = Convert.ToInt32(random.Next(1, 100));
i = -1;//将i置为-1,重新从array的第一个元素开始比较
}
}
//至此,x肯定与之前生成的任意一个随机数都不相等了,输出x,并记录x
label1.Text = x.ToString();//我这里放个Lable来显示,你根据实际需求调整

//将刚才生成的x拼接到outPut里,别忘了加逗号分隔
outPut = string.Format("{0},{1}", outPut, x.ToString());
}

也可以直接初始化一个100长度的数组来记录,毕竟你要求是1到100的不重复数字,也就是说肯定不可能超过100次,但是感觉这样不是太好,毕竟不是每次打开这个页面都会点100次按钮的。

刚修改了一下,加了个判断,楼主重新看一下。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-26
static void Main(string[] args)
{
int[] longNum = new int[100];
int rand = 0;
Random rd = new Random();
for (int i = 0; i < 100; i++)
{
rand = rd.Next(100)+1;
if (!isContain(longNum, rand, i))
i--;
else
longNum[i] = rand;
}
}
第2个回答  2011-08-27
生成随机数的就不写了,网上一搜一堆
这里我用C#(VB不熟)写了分解的逻辑,返回的数组就是分解出来的因子

static int[] factor(int value)
{
//由于负数的跟正数一致,这里直接取绝对值,如果需要处理负数就删掉这行并改下后面的循环,怎么改自己琢磨
value = Math.Abs(value);

//3以内的不考虑
if (value<=3)
{
return new int[] ;
}

//计算
for (int i = 2; i < value; i++)
{
//确定能除的最小数
if (value % i == 0)
{
//计算并合并数组
int[] array1 = new int[] ,
array2 = factor(value / i),
array = new int[array1.Length + array2.Length];
array1.CopyTo(array, 0);
array2.CopyTo(array, 1);
return array;
}
}
return new int[] ;
}
第3个回答  2011-08-26
如果需要不重复的数的话,在实例化Random类时可以用时间种子,循环语句楼上两位都写了。

Random random = new Random(System.DateTime.Now.Millisecond);

以“System.DateTime.Now.Millisecond”作为时间种子能避免产生重复数据追问

试了,,,,不好使啊

追答

厄。。。没理由啊

急急, c#产生随机数,一到一百的不重复的
Random random = new Random();int[] array = new int[要生成的随机数个数];for(int i = 0; i < array.Length; i++){ int x = Convert.ToInt32(random.Next(1, 100));for(int j = 0; j < i; j++){ if(x == array[j]){ x = Convert.ToInt32(random.Next(1, 100))...

C# 如何生成不重复的1-100随机数。
有两种思路:1、随机生成一个1-100的数,然后判断重复,如果重复再生成一次;2、创建一个数组,元素内容为1-100,对元素随机排序。请参考下面的代码 public void GenerateRandomNums(){ List list = new List();Random rand = new Random();int value;while (true){ if (list.Count == 20){ ...

c# 问如何产生100个1-100范围内的数
return 系统随机数.Next(min1, max1 + 1) * aliquot; } #endregion #region Rnds多个不重复随机整数(指定范围) \/\/\/ 产生int个1到Max之间的整数数组。 public static int[] Rnds(this int 个数, int Max) { return Rnds(个数, 1, Max); } \/\/\/ 产生一个Min到Max的数组,指定int个数(零和负数默认...

C# 如何产生100以内不重复的随机数?
可以考虑先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...),将该位置的数与最后一个位置的数对调就可以了。using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 { class Program { static void Main(string[] arg...

C# 中怎样随机输出从0~100的数字且不重复?(不用数组)
static void Main(string[] args){ List<int> numbersToSelect = new List<int>();for (int i = 0; i < 100; i++){ numbersToSelect.Add(i);} for (int j = 99; j >= 0; j--){ Random random = new Random();\/\/ 保证index落在List大小范围之内 int index = random.Next(...

用C#编写程序,生成一个长度为100的数组,然后向数组中随机插入1~100之间...
楼上是第一个,结果b数组值为1~100排序的数。下面是第二个,结果数字是随机的,但插入是顺序插入的代码如下:int[] arr = new int[100];Random r = new Random(DateTime.Now.Millisecond);for(int i=0;i<100;i++){ int temp = r.Next(1, 100);while(true){ if (Array.IndexOf(arr...

c#怎么随机1-100的不重复数字放入5x5的二维数组,再随机五个不重复名字...
\/\/随机五个不重复名字放入一个数组,\/\/将两数组下标对齐。是什么意思?\/\/只做了第一小问。using System;class Program { public static void Main(string[] args){ const int C=5;Random r=new Random(DateTime.Now.Millisecond);int[,] arr=new int[C,C];int[] temparr=new int[C*C];...

c# 0-100不不重复随机数 乱序填充到100的数组中
\/\/0-100有101个数,但你只是放到100长度的数组,到时自己修改下 Random rbd = new Random();ArrayList myarray = new ArrayList();int[] num = new int[100];while (myarray.Count <= 100){ int next = rbd.Next(0,101);if (!myarray.Contains(next)){ myarray.Add(next);} } for...

c#怎么实现取1-100之间的随机数
Random r = new Random();int num = r.NextInteger(1,101);这样随机数才是1-100.那个函数是不包括上限在内的

C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码...
直接Random.Next(1, 101)可产生随机数,用一个List<int>存起来,每次新随机就会去这个List中找,如果找到就再随机,自到随机出新的数。1、放一个TextBox框、要把MultiLine属性改成True。(模拟输出结果)2、放个Timer 3、放个Button。4、定义两个全局对象 int inTimer = 0; \/\/原子锁对象List...

相似回答