一道基础的算法题
随机生成1~10不同的10个数:(我也觉得它是吃饱了撑的,但题目就是这样)[html]static int[] ii = new int[10];
static Random r = new Random();
static void Main(string[] args)
{
init();
for (int i = 0; i < 10;i++ )
{
Console.WriteLine(ii[i]);
}
Console.Read();
}
static void init()
{
ii[0] = r.Next(1,10);
for (int j = 1; j <10;j++ )
{
ii[j] = getOne();//得到一个不重复的数字
}
}
static int getOne()
{
int aa = r.Next(1,10);
if(check(aa))//判断重复没有
{
getOne();//我就是对这个地方有疑问,不晓得该怎么写,加个return getOne();就报有死循环了
}
return aa;
}
static bool check(int r) {
int len = ii.Length;
int len2 = 0;
for (int i = 0; i < len; i++)
{
if (ii[i] == 0)
{
len2 = i;
break;
}
}
for (int i = 0; i < len2; i++)
{
if (ii[i] == r)
return true;//重复
}
return false;//不重复
}[/html]
我写了一个,但是有点问题,请大家教哈小弟该怎么写。。。 [code]
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string tempstr = "";
int[] Arr1 = new int[10];
Arr1 = GetArrRan();
if (Arr1.Length == 10)
{
for (int i = 0; i < Arr1.Length; i++)
{
tempstr += "随机数:" + Arr1[i].ToString() + "\r\n";
}
}
Console.Write(tempstr);
}
static int[] GetArrRan()
{
int[] ReturnArr = new int[10];
Random r = new Random();
int i = 0;
while (i < 10)
{
int tempint = r.Next(1, 100);
if (!CheckArr(ReturnArr, tempint))
{
ReturnArr[i] = tempint;
i++;
}
}
return ReturnArr;
}
/// <summary>
/// 检查值是否存在于数组中,存在则返回true,否则为false
/// </summary>
/// <param name="Arr1"></param>
/// <param name="CheckValue"></param>
/// <returns></returns>
static bool CheckArr(int[] Arr1, int CheckValue)
{
bool ret = false;
for (int i = 0; i < Arr1.Length; i++)
{
if (Arr1[i] == CheckValue) ret = true;
}
return ret;
}
}
}
[/code]
回复 michaelzhouh 在 1# 的帖子
ii[0] = r.Next(1,10);-------------------------------------------------
参数
minValue
类型:System..::.Int32
返回的随机数的下界(随机数可取该下界值)。
maxValue
类型:System..::.Int32
返回的随机数的上界(随机数不能取该上界值)。maxValue 必须大于等于 minValue。
所以这个随机数一直都是在 1=<随机数<=9,一共是9个数.而你的10个数又不能相同.所以永远都取不远.这样才有问题 10个随机数?
如果随机数选择范围很小的话,可以把它们都放在一个数组里,每次生成一个随机index,取出(取出完数组里就没这个数了)数组里的这个数,然后继续,不需要进行重复判定
回复 flash665 在 2# 的帖子
谢谢你的代码了,我改了一下这句话就是我要的结果了。int tempint = r.Next(1, 11);
10不重复的数。
页:
[1]