반응형
난수생성함수
랜덤한 수 즉 난수를 생성하기 위해서는 rand함수를 사용한다.
xxxxxxxxxx
//rand()
int main (){
for(int i = 0 ; i < SIZE ; i++){
printf("%d\n",rand());
}
return 0;
}
xxxxxxxxxx
OUTPUT
1804289383
846930886
1681692777
1714636915
1957747793
이처럼 아무 연관없는 정수가 출력된다. 하지만 프로그램을 여러 번 실행해 보면 같은 값이 계속 나오는것을 확인할 수 있다. 매번 난수를 다르게 출력하는 데는 srand함수를 사용한다.
xxxxxxxxxx
//rand(), srand()
//time()
int main (){
srand(time(NULL));
for(int i = 0 ; i < SIZE ; i++){
printf("%d\n",rand());
}
return 0;
}
이렇게 하면 프로그램을 실행할 때 마다 다른값이 출력되는 것을 확인할 수 있다.
가끔 정렬을 확인하기 위해 임의의 배열을 만들어야 하는 경우가 있다. 이 떄 배열의 값으로 랜덤한 수를 넣어준다. 값이 중복되어도 문제가 되는 경우는 없지만 중복없이 배열을 채우는 법은 다음과 같다.
xxxxxxxxxx
//rand(), srand();
//time()
//memset()
void mkArr(int* arr, int size){
int cnt = 0;
int test[size];
memset(test,0,size*4);
srand(time(NULL));
while(cnt<size){
int num = rand()%size;
if(test[num] == 0){
test[num] = 1;
arr[cnt] = num;
cnt++;
}
}
}
int main (){
int arr[SIZE];
mkArr(arr,SIZE);
for(int i = 0; i<SIZE; i++){
printf("%d\n",arr[i]);
}
return 0;
}
xxxxxxxxxx
OUTPUT
2
4
0
3
1
반응형