1~45사이의 숫자가 랜덤으로 여섯번 출력되게 하는 프로그램을 짜는 문제입니다..
이때 중복되는 값이 없도록 출력해야하며, 난수를 발생시키는 함수 int lotto(void)와 중복을 검사하는 함수 int is_in_array(int size, int num)은 반드시 사용해야만 합니다.
아래 코드처럼 짜봤는데 중복되는 값이 계속 나와서 질문드립니다. 어느 부분을 고쳐야 잘 돌아갈까요?
이상하게 문제를 못찾겠습니다.. 물론 제 눈에만 안보이는것 같긴 합니다만
도와주시면 정말로 감사하겠습니다... 꾸벅
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int lottoNum[6];
int lotto(void) /* 난수 생성 함수 */
{
int number;
long seed;
seed = time(NULL); /* 시간이 지남에 따라 새로운 난수 생성 */
number = (rand() % 45 + 1); /* 생성한 난수를 number에 저장 */
return number; /* number값 반환 */
}
int is_in_array(int size, int num) /* 중복검사 함수 */
{
int i, j;
for (i = 0; i < size; i++)
{
for (j = 1; j < size; j++)
{
if (lottoNum[i] == num) /* 현재 i번째 값과 비교 */
{
if (lottoNum[j] == lottoNum[i]) /* 이전에 생성된 값과 비교 */
return 1; /* 같은 수가 있다면 1을 반환 */
}
else
return 0;
}
}
}
int main(void)
{
int i, a, count = 0;
srand((unsigned)time(NULL));
for (i = 0; i < 6; i++)
lottoNum[i] = rand() % 45 + 1;
while (1)
{
a = is_in_array(i, lottoNum[i]); /* a = 1이면 같은 숫자가 있음 */
if (a == 1)
{
lottoNum[i] = lotto(); /* 재생성 */
}
else if (a == 0) /* 같은 숫자가 없음 */
{
count++;
if (count == 5)
break;
}
}
for (i = 0; i < 6; i++)
printf("%d ", lottoNum[i]);
return 0;
}