감사합니다.
StarWagon 님이 쓰신 글 :
: 답변의 답변을 보다 보니 궁극적으로 원하시는 바를 알겠기에 다시 답변답니다.
: 아래와 같이 하시면 원하는 결과를 얻으실것 같네요.
:
: 예전 자게에서 Nibble 님이 올리신 중복 없는 난수 추출 코드를 약간 손봤습니다.
: (어떠한 일로 삭제되긴 했지만...)
:
: 속도도 제 컴퓨터 기준 0.3~0.4초 정도 걸리고, 메모리도 386mb 밖에 안먹네요.
:
:
:
:
: struct PHONENUMBER {
: short f,r;
: AnsiString GetNumber() {
: AnsiString s;
: s.printf("010-%04d-%04d",f,r);
: return s;
: }
: };
:
:
: void shuffle(PHONENUMBER* items, int count, int totalcount );
: void swap(PHONENUMBER &a, PHONENUMBER &b);
: //---------------------------------------------------------------------------
: void shuffle( PHONENUMBER* items, int count, int totalcount)
: {
: Randomize();
: for( ; count; --count )
: swap( items[Random(totalcount)], items[--totalcount] );
: }
: //---------------------------------------------------------------------------
: void swap(PHONENUMBER &a, PHONENUMBER &b)
: {
: PHONENUMBER tmp=a;
: a=b;
: b=tmp;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: TDateTime N=Now();
:
: int Count=9999;
:
: PHONENUMBER *num=new PHONENUMBER[Count*Count];
:
: int TotalCount=0;
:
: for (int i = 1; i <= Count; i++) {
: for (int j = 1; j <= Count; j++) {
: num[TotalCount].f=i;
: num[TotalCount].r=j;
: TotalCount++;
: }
: }
:
: int shufflecount=10; //여기에 40만개를 넣으면 result에 40만개가 채워집니다.
: shuffle(num, shufflecount,TotalCount);
:
: PHONENUMBER *result=new PHONENUMBER[shufflecount];
: memcpy(result,&num[TotalCount-shufflecount],sizeof(PHONENUMBER)*shufflecount);
:
:
: for (int i = 0; i < shufflecount; i++) {
: Memo1->Lines->Add(result[i].GetNumber());
: }
:
:
: N=Now()-N;
: ShowMessage(N.FormatString("s.zzz"));
: delete[] num;
: delete[] result;
:
: }
: //---------------------------------------------------------------------------
:
:
:
:
|