라이브러리 함수

강상은·2024년 1월 15일

C++

목록 보기
5/5

난수(random number)

규칙성이 없이 임의로 생성되는 수
난수는 암호학이나 시뮬레이션, 게임 등에서 필수적

1. rand() 함수

  • 초깃값에 따라 무작위로 숫자를 출력할 때 사용하는 함수
  • 프로그램을 실행할 때마다 같은 숫자가 출력되는 단점이 있음

2. rand() 함수를 이용하여 6개 난수 출력

#include <Stdio.h>
#include <stdlib.h>

int main(void) {
	int cnt; // 반복제어변수
    
    printf(" 1~45 중에서 숫자 6개 출력 \n rand() : ");
    for(cnt = 1; cnt <= 6; cnt++)
    	printf("%d",rand()); //범위를 지정하지 않은 출력
        
        printf("\n rand() %% 45 : ");
        for(cnt = 1; cnt <= 6; cnt++)
        	printf("%d",(rand() % 45)); // 0~44 사이의 값 출력
            
        return 0 ;
}

3. 1부터 45번 사이의 난수를 발생시키도록 수정하면

printf("%d", 1+(rand()%45));

매번 난수를 다르게 생성하려면 시드(seed)를 다르게 함

현재의 시각은 시드로 사용하는 것이 일반적임
(현재 시각은 실행할 때마다 달라지기 때문)

srand() 함수 사용

4. srand()를 사용하여 로또 번호 생성하기

#include <Stdio.h>
#include <stdlib.h>
#include <time.h>
   
#define MAX 45

int main(void) {
	int i;
    
    srand( (unsigned)time(NULL) );
    for(i=0; i < 6, i++)
    	printf("%d", 1+rand()%MAX);
    return 0;
}

5. 동전 던지기 예제

  • 동전을 70번 던져서 앞면이 나오는 횟수와 뒷면이 나오는 횟수 출력
#include <Stdio.h>
#include <stdlib.h>
#include <time.h>

int coint_try(void);

int main(void) {

	int try,fronts = 0, backs=0;
    
 srand((unsigned)time(NULL));
 
 for(try=0;try<70;try++) {
 
 	if(coin_try()==1)
    	fronts++;
    else
    	backs++;
  }
  
  printf("동전 앞면 출현 횟수:%d \n",fronts);
  
  printf("동전 뒷면 출현 횟수:%d \n",backs);
  
  }
  
  int coin_try(void) {
  int i = rand() % 2
  if(i==0) return 0;
  else return 1;
 }
  

0개의 댓글