1. 程式人生 > >有bug的隨機生成不重復1-9的代碼

有bug的隨機生成不重復1-9的代碼

沒有 bsp stdlib.h brush class i++ 生成 int 產生一個隨機數

#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的代碼