|
최준호.스페로 님이 쓰신 글 :
: 진수.네모 님이 쓰신 글 :
: : 1에서 100 사이에서 난수를 발생 시키려 합니다.
: :
: : for(inti=0;i<100;i++)
: : random(100);
: :
: : 하면 같은 숫자가 여러번 반복되는데.. 서로 겹치지 않게 하려면 어떻게 하면 좋을까요
: :
:
: 안녕하세요 스페로입니다.
:
: 폼에 메모하나랑 버튼 올려주시고
:
: 다음의 코드를 버튼 클릭 이벤트에 해주세요
:
: 0 - 9 까지의 중복되지 않는 숫자가 무순서로 됩니다.
:
:
:
: int i=0,j,tmp;
:
: int arr[10];
:
: bool ok;
:
: time_t t;
:
: srand((unsigned) time(&t));
:
: while(i<10){
: tmp = rand() % 10;
: ok = true;
: for(j=0;j<10;j++){
: if(arr[j] == tmp) {ok = false;}
: }
:
: if (ok) {arr[i++] = tmp;
: Memo1->Lines->Add(IntToStr(tmp));
: }
: }
이렇게 하면 이중 루프가 돌아가므로 O(N^2) 가 됩니다.
N이 클 경우는 상당히 속도가 느려집니다. -_-;
저의 답글과 방태윤님의 코드로는 O(N)으로 해결할 수 있지요.
|