码迷,mamicode.com
首页 > 其他好文 > 详细

有bug的随机生成不重复1-9的代码

时间:2018-10-22 11:36:22      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:随机   std   假设   遇到   代码   rand   i++   产生   位置   

#include "pch.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"


int m[9] = {0};
int main(void)
{
	srand(time(0));
	for (int i = 1; i < 10; i++)
	{
		m[i - 1] = rand()%9+1;

		for (int j = 0; j < i - 1; j++)
		{
			while (m[j] == m[i - 1])
			{
				m[i - 1] = rand() % 9 + 1;

			}
			
		}
	}

	for (int i = 0; i < 9; i++)
	{
		printf("%d ",m[i]);
	}

}

  

大体思路是没有问题的,产生一个随机数,我们假设它在 m[i-1]  位置上,那么需要从m[0]到m[i-2]和m[i-1]依次判断随机数有没有在之前产生过。

 

while (m[j] == m[i - 1])
			{
				m[i - 1] = rand() % 9 + 1;

			}

但这段是有问题的,当遇到前面已经产生过的随机数则又产生一个新的随机数,而此时m[j]的j的值可能不是从0开始的,所以m[j]会从当前j的值一直走到m[i-2],而少了m[0]~m[j-1]的判断,这是产生bug的根本原因。

 

有bug的随机生成不重复1-9的代码

标签:随机   std   假设   遇到   代码   rand   i++   产生   位置   

原文地址:https://www.cnblogs.com/yfish/p/9829035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!