日期:2014-05-18 浏览次数:21317 次
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;
}