日期:2014-05-18  浏览次数:20950 次

如何向一个长度为100的数组随机不重复插入一到一百
如题,这是我今天碰到一个面试题,不会做...

------解决方案--------------------
我只會一遍又一遍的去判斷。。。
------解决方案--------------------
int[] num=new int[100]
Random r = new Random(); 
string k=",";
for(int j=0;j<100;j++)
{
 while(true)
 {
int i = r.next(1,100);
if(!k.Contains(","+i.ToString()+","))
{
num[j]=i;
k=k+i.ToString()+","
continue;
}
 }
}

思路如此....
------解决方案--------------------
C# code


 List<int> list = new List<int>();
            for (int i = 0; i < 100; i++)
            {
                Random r = new Random(1);
                int value = r.Next(101);
                if (list.Contains(value))
                {
                    while (true)
                    {
                        value = r.Next(1,101);
                        if (!list.Contains(value))
                        {
                            list.Add(value);
                            break;
                        }
                    }                    
                }
                else
                {
                    list.Add(value);
                }

            }

            string text = list.ToString();

------解决方案--------------------
我比较喜欢用随机数来做索引:
C# code

            Random rnd=new Random();
            int[] array=new int[100];
            ArrayList list=new ArrayList();
            for(int i=1;i<=100;i++)
            {
                list.Add(i);
            }
            for(int j=0;j<100;j++)
            {
                int tempRandom=rnd.Next(0,100-j);
                int tempValue=(int)list[tempRandom];
                array[j]=tempValue;
                list.Remove(tempValue);
            }

------解决方案--------------------
可以建立一个仓库,放入1-100,然后随机取一个,插入到目标数组,插入一个就从仓库里去掉这个.再随机的插,然后去掉插入的这个数.
这是思路,不知道能不能实现呢?
我说的仓库是不是也可以定义为一个100的数组呢?
------解决方案--------------------
学习 。。

我的技术不是很高,所以我也只能这么思考:
C# code

 int[] Num= new int[100];
            bool[] B = new bool[101];
            int Temp = new int() ;
            Random R = new Random();

            for (int i = 0; i < 100; i++)
            {
            Again:
                Temp = R.Next(1, 101);
                if (B[Temp] == false)
                {
                    Num[i] = Temp;
                    B[Temp] = true;
                }
                else
                {
                    goto Again;
                }
            }

            for (int x = 0; x < 100; x++)
            {
                Console.WriteLine("{0} :{1}", x, Num[x]);
            }

------解决方案--------------------
如果硬是要做的话,6楼的想法不错
题目有点变态,要求不重复又要求随机,感觉矛盾了(也就是说这个随机不是正真的随机),搞不好正确答案是“该题目矛盾”。