로또는 아시다 시피 1 부터 45 개의 숫자가 있죠 .. 그중에서 중복되지 않은 6개의 숫자를 표시 하면
되는거구요...
보통이런거 만들게 되면.. 거의 대부분

1. 랜덤 초기화  (Randomize)
2. 랜덤으로 6개의 숫자를 얻어온다.
3.  그 6개의 숫자중 중복되는 숫자가 있는지 검사한다.
4 . 중복되는 숫자가 있을경우 다시 랜덤으로 숫자를 얻어오길 반복한다.
5 . 중복되는 숫자가 없을경우  반복을 빠져 나온다....

보통 이렇게 프로그램하게 됩니다... 이게 틀린방법은 당연히 아닙니다.  45개의 숫자중에서 6개를 뽑아와야
할경우 이방법은 뒤에  제가 설명하는 방법보다 당연히 빠릅니다.  근데 6개의 숫자 말고 .  45개의 숫자중
45개를  랜덤으로 뽑아와야 할경우가 있다고 생각하면 얘기가 달라집니다..(이런경우는 포커 게임에서 트럼
프를 나눠주는경우를 생각하시면 됩니다. 카드의 숫자는 일정한데  나눠주는 모든 카드는 중복되서는 안되는
경우..... ) 

이런경우는 보통 어떻게 하냐면요.  index 가 45인 배열을 서로 섞어서 뿌려주는 방법을 사용합니다.
쉽게 트럼프를 딜러들이  반을 쪼개서 ...따라라라 (어떻게 표현해야 할지 --;) 섞어주는걸 생각하시면됩니다.

dim  rotto(45)
dim  index , i , rnd1, rnd2 , temp

for i = 0 to 44
          rotto(i) = (i + 1)      '<- 배열의 값을 초기화 시켜줍니다 rotto(0) = 1 , rotto(1) = 2 ...... rotto(44) = 45
next i 

Randomize 

for i = 0 to 1000              ' <- 딜러가 카드를 천번 섞는다고 생각하시면 됩니다..이해가 안되시면 숫자를 10
                                        이나 50정도 작은 숫자를 넣고 해보세요 카드가 잘안섞이는걸 보시게 됩니다.

  rnd1 = int  ((( 44 - 0 + 1) * Rnd + 0))    ' 45 숫자 두개를 랜덤으로 가져옴 
  rnd2 = int  ((( 44 - 0 + 1) * Rnd + 0))    ' rnd1 은  10  rnd2 는 23 이 나왔고 가정합시다.

  temp  =  rotto(rnd1)                    ' rnd1 이 10 이므로  배열의 index 는 0부터 시작해서 temp 에는 11
  rotto(rnd1) = rotto(rnd2)              '  rotto(10) = rotto(23)    즉 rotto(10) = 24
  rotto(rnd2) = temp                      ' rotto(23) = 11  이렇게 들어 가게 됩니다.
 
next i                                          ' 위의 행동을 반복

for i = 0 to 5
    response.write    rotto(i) & "<br>"    ' index 순서대로 한번 뿌려 보시면 6개의 숫자가 중복되지않음
next i

for i = 0 to 4
    response.write    rotto(i) & "<br>"    ' index 순서대로 한번 뿌려 보시면 45개의 숫자가 중복되지않음
next i


ps . 문법검사를 안해봐서  오타가 나올수 있다는점 감안해 주세요

+ Recent posts