经典论坛's Archiver

michaelzhouh 发表于 2008-7-4 13:50

一道基础的算法题

随机生成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]

我写了一个,但是有点问题,请大家教哈小弟该怎么写。。。

flash665 发表于 2008-7-4 15:09

[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]

flash665 发表于 2008-7-4 15:19

回复 michaelzhouh 在 1# 的帖子

ii[0] = r.Next(1,10);

-------------------------------------------------
参数
minValue
类型:System..::.Int32

返回的随机数的下界(随机数可取该下界值)。

maxValue
类型:System..::.Int32

返回的随机数的上界(随机数不能取该上界值)。maxValue 必须大于等于 minValue。

所以这个随机数一直都是在  1=<随机数<=9,一共是9个数.而你的10个数又不能相同.所以永远都取不远.这样才有问题

ariex 发表于 2008-7-4 15:30

10个随机数?
如果随机数选择范围很小的话,可以把它们都放在一个数组里,每次生成一个随机index,取出(取出完数组里就没这个数了)数组里的这个数,然后继续,不需要进行重复判定

michaelzhouh 发表于 2008-7-5 23:37

回复 flash665 在 2# 的帖子

谢谢你的代码了,我改了一下这句话就是我要的结果了。
int tempint = r.Next(1, 11);
10不重复的数。

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.