배열 랜덤 사용시 똑같은 숫자 안나오게 하는법
안찬
질문 제목 : 랜덤함수사용해서 voc[0]~[2]까지 3개의 단어를 임의로 출력하는건데요
1. 저렇게 만드니 똑같은 단어가 중복해서 나오는데 안나오게 하고싶습니다
2. 원하는것은 랜덤으로 임의의 수가 나왓을시 첫번째에 voc[1]이 나왓다면두번째에는 voc[0]~voc[2]까지 확인하여출력됬던
voc[1]을제외하고voc[0],voc[2]를랜덤으로 돌려서 두번째 수가 나오는 방식 입니다
질문 내용 :
#includestdio.h
#includeconio.h
#includestdlib.h
#includetime.h
void ex1()
{
char *voc[3];
int a,b=13,c;
voc[0]=because;
voc[1]=since;
voc[2]=now that;
srand((unsigned)time(null));
printf(시작하려면 엔터를 치시오\n);
b=getch();
for(c=1;c=3;c++)
{
a=rand()%3;
printf(접속사를 맞추시오 %d번 %s\n,c,voc[a]);
}
}
void main()
{
ex1();
}
-
소율
중복 제거하는 것은 좀 어렵습니다. ^^;;;
반드시 중복되지 않도록 뽑는다고 생각하지 말고,
이미 뽑은 것은 없애버리는 개념으로 접근하는 방법도 있죠.
예를들어 단어 목록을 Linked List로 만들어서 한번 뽑은 것은 목록에서 삭제한다던가... -
상큼한캔디
#includestdio.h
#includeconio.h
#includestdlib.h
#includetime.h
void ex1()
{
\tchar *voc[3];
\tchar *voca[3];
\tint a,b=13,c=0;
\tvoc[0]=\because\;
\tvoc[1]=\since\;
\tvoc[2]=\now that\;
\tsrand(time(NULL));
\tprintf(\시작하려면 엔터를 치시오\\n\);
\tb=getch();
\t -
나샘
랜덤 중복 안되는 것은 쉬운 방법은 없습니다.
랜덤 돌려서 이미 나온 값이면, 다시 돌린다던가... (양이 많을 수록 느려지죠.)
이미 나온 수를 제외하고 랜덤을 돌린다던가... (요건 좀 머리를 써야 합니다.)