程序设计_洗牌程序
问题
洗牌程序。52张牌(不算大小王),一个人随机地洗牌,每次结果都不同。
分析
随机数的使用。计算机不可能产生完全随机的数字。所谓随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似地模拟完全随机数,这种随机数被称为伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但从实用的角度而言,已经足够了。伪随机数的选择是从随机种子开始,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择很重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我们使用系统时间有关的参数作为随机种子,这也是.NET Framework中的随机数发生器默认采用的方法。
C#方案
using System;
class Program
{
static void Main(string[] args)
{
string[] porks = new string[] { "A-S", "A-C", "A-H", "A-D",
"2-S", "2-C", "2-H", "2-D",
"3-S", "3-C", "3-H", "3-D",
"4-S", "4-C", "4-H", "4-D",
"5-S", "5-C", "5-H", "5-D",
"6-S", "6-C", "6-H", "6-D",
"7-S", "7-C", "7-H", "7-D",
"8-S", "8-C", "8-H", "8-D",
"9-S", "9-C", "9-H", "9-D",
"10-S", "10-C", "10-H", "10-D",
"J-S", "J-C", "J-H", "J-D",
"Q-S", "Q-C", "Q-H", "Q-D",
"K-S", "K-C", "K-H", "K-D",};
string tmp;
int i, randtmp;
Random r1 = new Random();
for (i = 0; i < 52; i++)
{
// 随机生成数组下标
randtmp = (int)(52 * r1.NextDouble());
tmp = porks[i];
porks[i] = porks[randtmp];
porks[randtmp] = tmp;
}
for (i = 0; i < 52; i++)
{
Console.WriteLine(" {0}", porks[i]);
}
Console.WriteLine("Note: S-spade C-club H-heart D-diamond");
Console.ReadKey();
}
}