ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] 난수 생성 rand(), srand(), time()
    기초/C,C++ 2017. 2. 24. 09:41

    랜덤 함수

    로또 같이 임의로 숫자를 원할때 사용하기 위한 함수이다.

     

    rand() 함수

    사용 헤더 : <stdlib.h>

     

    rand 함수 범위 : 0~32767

     

    원하는 범위의 랜덤값을 출력하고 싶을 때

     

    [사용법]

    rand()%MAX범위(마지막값)+MIN범위(초기값);

     

    ex) 로또 숫자 뽑기 1~45까지

    rand()%45+11;

    rand은 "중복 결과"가 발생 할 수 있다.

    그때 rand()함수의 값을 지정해서 출력할 수 있다.

     

    srand(시드값);

    srand에 시드값을 넣으면 거기에 맞는 값이 출력;

    시드값을 time();함수로 넣으면 계속 변하는 난수 발생

    [사용법]

    srand(time());

     

    time() : <time.h>헤더를 사용

    현재 시간을 출력하는 함수

     

    하지만 범위 정수를 출력할 때 는 함수를 따로 만들어줘서 중복을 제거해야한다.

    이유는 rand함수를 % 사칙연산을 사용해서 나머지값으로 사용하기에

    중복되는 나머지값이 나올수 있다

    (ex) 5%2 = 1, 9%2 =1

    따라서 사용자 함수를 직접 만들어줘서 사용한다.

     

    [로또]

     

    [로또 소스]

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <Windows.h>
    #define ROTTO 7

    int num[ROTTO];

    int ran(int n){
     int i=0;
     int rNum=rand()%45+1;

     for(i=0;i<n;i++){
      if(num[i]==rNum){
       rNum = rand()%45+1;
       i=-1;
      }
     }
     return rNum;
    }

     

    int main(){
     int i=0;
     printf("=========로또=======\n");
     for(i=0;i<ROTTO;i++){
      num[i] = ran(i);
      if(i==6) printf("보너스 숫자 : %d\n",num[i]);
      else printf("%d번째 숫자 : %d\n",i+1,num[i]);
     }

     return 0;
    }

    '기초 > C,C++' 카테고리의 다른 글

    [C/C++] 키워드  (2) 2017.02.24
    [C/C++] <Windows.h>  (0) 2017.02.24
    [C/C++] 모듈(함수)  (0) 2017.02.23
    [C/C++]배열, \0(null)  (0) 2017.02.22
    [C/C++] ★찍기 //별찍기  (0) 2017.02.20

    댓글

Designed by Tistory.