배열 랜덤함수에 대한 질문입니다 ..
떠나간그녀
배열 랜덤 함수에 대한 질문입니다.
질문 요약 :배열a[0]~a[9]에 0~9까지의 숫자를 랜덤 함수를 이용해서 넣으려고 합니다.
즉 배열 10개에 숫자 10개를 랜덤으로 겹치지 않게 집어 넣으려는 것이지요 ..
그래서 저는 .. 배열 두개를 이용해서 랜덤으로 수를 집어 넣는 문장을 해보았는데.. (아래 for문 안에 if문이 있는 문장입니다..)
결과값은 나오는데 이 문장에서도 결국 배열의 갯수가 1만개나 .. 2만개로 늘어나면 큰 오류가 생긴다는 것을 발견했습니다ㅠㅠ
문장을 보면 한번 사용했던 숫자가 있는 배열 칸에는 값을 1을 주어서 랜덤으로 숫자를 돌렸을때 다시 그 배열칸은 이미 1이 채워져 있으니 그 숫자를 사용하지 말라는 명령어인데 ..(디버깅 한번 해주세용 ㅠ 말로 설명하기 어렵네요 ㅠㅠ) 카운트로 다시 돌아가는 수를 세어보니 10번중에 8번 정도가 나와서 결국 수가 늘어났을 때는 100번에 80번이 리턴되는 경우가 생기면 과부하가 걸린다고 해야할까요 ..
질문!!) 이런 문제가 발생해서 배열 값이 있으면 1을 사용하는게 아니라 그 값이 들어있는 배열은 아에 그 번지를 없애고 싶습니다.. 배열의 번지수 당기기라고 표현하면 맞을까 모르겠네요 .. 대략적으로 생각한건 for문에 i=i+1을 비교하고 .. 초기값이 0이 아닌 다른 수를 넣으면 될꺼 같은데 .. 초보자라서 머가 먼지 잘 모르겠습니다 ㅠㅠ
배열의 번지수를 땡길 수 있을까요??질문 내용 :
#include stdio.h
#include stdlib.h
#include time.h
#define MAX 10
int i;
int k;
int a[MAX]; // 10개 요소를 가지는 1차원 배열을 선언
int b[MAX]; // 랜덤으로 들어갈 숫자를 지정하는걸 선언
void init(void)
{
for(int i=0; iMAX; i++){
a[i]=0;
b[k]=0;
} // 초기 함수 정의
}
void main(void)
{
init();
srand(time(NULL));
i = rand() %MAX;
for (i=0;iMAX;i++){
k = rand() %MAX;
if(b[k] != 1){
b[k] = 1; // 이 부분에서 배열에 값이 있으면 자리가 차있다는 뜻으로 1을 써주는데 .. 1을 써주는 대신 배열을 땡기고 싶어요 ㅠㅠ
a[i] = k;}
else{
i--; //중복되면 처리를 위해 감소
}
}
for(i=0;iMAX;i++)
printf(\n%d,a[i]);//10개를다 출력하는거 ..
}