日期:2014-05-18 浏览次数:21326 次
        int[] numbers = new int[100];
        for (int i = 0; i < 100; i++)
            numbers[i] = i;
        Random rd = new Random();
        int index, realLength = numbers.Length, temp;
        for (int i = 0; i < 100; i++)
        {
            index = rd.Next(realLength);
            Response.Write(numbers[index] + "<br/>");
            temp = numbers[index];
            numbers[index] = numbers[realLength - 1];
            numbers[realLength - 1] = temp;
            realLength--;
        }
------解决方案--------------------
        List<int> numbers = new List<int>();
        for (int i = 0; i < 100; i++)
            numbers.Add(i);
        Random rd = new Random();
        int index;
        for (int i = 0; i < 100; i++)
        {
            index = rd.Next(numbers.Count);
            Response.Write(numbers[index] + "<br/>");
            numbers.RemoveAt(index);
        }
------解决方案--------------------
test
            int[] result = new int[120];
            Random ran = new Random();
            int left = 1900, right = 2020;
            bool[] flag = new bool[right];
            for (int i = 0; i < result.Length; i++)
            {
                int temp = ran.Next(left, right);
                left = (temp + 1) == left ? temp + 1 : left;
                right = (temp - 1) == right ? right - 1 : right;
                while (flag[temp])
                {
                    temp = ran.Next(left, right);
                }
                flag[temp] = true;
                result[i] = temp;
            }
            foreach (int i in result)
                Console.WriteLine(i);
------解决方案--------------------
class Program {
    static void Main(string[] args) {
        Console.WriteLine(string.Join(",", new Poker(1900, 2020).Shuffle().ToArray()));
        Console.WriteLine("press any key to exit.");
        Console.ReadLine();
    }
}
public class Poker : List<int> {
    public Poker(int begin, int end) {
        if (end <= begin) throw new ArgumentException();
        this.begin = begin;
        this.end = end;
        random = new Random((int)DateTime.Now.Ticks);
    }
    public Poker Shuffle() {
        List<int> source = new List<int>();
        for (int i = begin; i <= end; ++i) { source.Add(i); }
        int? next = null;
        while ((source.Count > 0) && ((next = Pop(source)) != null)) {
            this.Add(source[next.Value]);
            source.RemoveAt(next.Value);
        }
        return this;
    }
    private int? Pop(List<int> source) {
        return source.Count > 1 ? random.Next(source.Count) : 0;
    }
    private Random random;
    private int begin, end;
}