Q&A

  • 랜덤하게 출력하기인데.
제발 부탁드립니다. 왕초보라.. 어디로 튀어야 될지 몰겠네요;; 쩝
    숫자   1,2,3,4,5,6,7,8,9,0
소문자   a,b,c .. ,y,z

숫자는 3(123)자리씩 맞춰서 중복되지 않게 500개만들구여..
소문자는 5(abcde)자리씩 맞춰서 중복되지 않게 500개 만들어서
소문자와 숫자를 합하여 출력하라(abcde123)

델파이 공부하다가 도저히 막히네요..
미치겠습니다. 어찌 해야 합니까. 도와 주세요 고수님들...
2  COMMENTS
  • Profile
    이중철 2004.06.09 00:19
    일단 이 프로그램이 학습용으로 교수가 과제로 냈다면
    아마도 일반적인 방법으로 하는것이 아닐꺼에요.
    보통 데이타구조론 교수가 이 문제를 많이 냅니다.
    또한, 마찬가지로 상용프로그램에서도 일반적인 방법을 사용하면
    안되는것은 당연하죠
    일단 소문자와 숫자를 합하여 출력하는것은 다 알고 있다는
    가정하에 출발합시다.
    그리고,
    랜덤으로 발생한 데이타와 기존의 데이타와 비교하여
    있을경우 다시 랜덤을 발생한다.
    이 명제는 같습니다.
    그러나 기존의 데이타와 비교하는 방법에는 차이가 있죠
    일반적으로 무작위로 저장된 데이타와 비교할 경우
    순차적 검색을 하는데 이럴경우
    최대 N! 검색 Load가 걸립니다.
    그렇다고 입력시 계속적인 Sort를 하는것도 더 많은 문제가 발생하죠
    이 문제의 정답은 양방향 링크 구조 입니다.
    다른말로 Tree구조라고도 하죠
    입력할때부터 양방향링크구조에 집어넣고 검색하는 방식으로
    방법은 데이타구조론 책에 서술되어 있습니다.
    아마도 여기 팁란에도 양방향링크는 여기저기 있을거에요.

    이궁 정말 답변을 할까 말까 고민많이 했음.
    질문의 요지 자체가 위의 답변을 요구하는 것인지
    아니면 정말 Random발생도 못하는 수준인지 알 수 없어서...
    그럼 이만.

    PS : 랜덤 발생 루틴
           s := chr($61 + random(26)) +
                 chr($61 + random(26)) +
                 chr($61 + random(26)) +
                 inttostr(random(10)) +
                 inttostr(random(10) +
                 inttostr(random(10));


  • Profile
    [勳]후니 2004.06.08 21:01
    방법이야 많이 있는데..

    숫자야 3자리면 100 ~ 999 숫자중 하나 램덤으로 받으면 되고여..

    문자는 a~z까지 배열로 만들고 알파벳 26자 5번을 램덤으로

    숫자 받아 이걸 인자로 하는 문자를 뽑아서 5자리를 만들면 되것네요..

    그리고 500개씩 중복 안되게 할려면

    하나 생성하고 배열에 저장된 갑이랑 비교 중복 없으면 마지막에 저장..

    이정도 설명이면 아시겠죠~~