今天做数独游戏的时候遇到一个问题,没法做到随机产生几组0-9之间的随机数。刚开始产生一组是没问题的,但当用循环来产生几组随机数时,发现产生的几组随机数完全是一样的。百度之后知道了原因,原来c语言中的随机数也不能算是完全随机数。srand((unsigned)(time(NULL)))是用来接收一个随机种子,rand()是根据随机种子而得到的一组随机数。说是随机数,其实本质却是一组不变的数。即只要随机种子一样,rand()得到的是一组永远不变的随机数列。而随机种子是(unsigned)(time(NULL)),是1970年1月1号到现在共有多少秒。这就造成了一个问题,如果你想得到几组随机数,而此时你把获得随机数的种子的函数srand((unsigned)(time(NULL)))放在循环里面,会因为每次循环时间远远小于1秒而每次得到的随机数都是以该随机种子所代表的一组永远不变的随机数列的前几个随机数。解决办法也很简单,产生随机种子的函数放到循环函数外面去,这样虽然种子永远是不变的,但每次得到的随机数就是该随机种子所代表的一组永远不变的随机数列的n歌随机数了,即他会延续着上一次的地方继续读取该组随机数。(难说清楚)
eg.例如 随机种子a对应了固定的一组随机数列 1 5 6 78 9 2 4 5 7 1 2 35 52 41 你要产生2组4位的随机数,那么随机种子函数放在内部得到的随机数为1 5 6和1 5 6
随机种子函数放在外面得到的随机数为1 5 6和78 9 2