HOME

  • 총~ 350포인트 짜리 퀴즈~

안녕하세요?


한델 이정욱 입니다~


심심해서 이벤트 한번 해봅니다 ~


참여하시는 분들 중 1등(200),2(100),3(50) 등게세 한델 포인트 총 350점을 드리겠습니다.


현재 포인트를 많이 가지고 계신분이 없으셔서 더 많은 포인트를 드리기가 뭐 해서 이정도 드립니다. ^^


대신 간단한 퀴즈로 할께요~


퀴즈~

for 문과 while 문 그리고 repeat 문을 사용하여 1 부터 10000 까지 더하여 writeln 으로 출력하는 코드를 작성해주세요. 단, 1 부터 5000까지는 for문을 이용하여, 5001 부터 8000까지는 while문을 이용하여, 8001부터 10000까지는 repeat문을 이용하여 작성해주세요.


1,2,3 등을 정하는 기준은 그 코드를 가지고 같은 PC에서 가장 빠른 속도를 내는 코드를 기준으로 하겠습니다.


많은 참여 부탁드리겠습니다~


감사합니다.







17  COMMENTS
  • Profile
    백록화 2011.01.19 13:26

    제출은 어떻게 언제까지 하나요? 코드만 올리나요?

  • Profile
    소나기 2011.01.19 14:26

    음 재미 있겠네요. 댓글로 달면 아무래도 보고하게 될꺼 같은데.. ㅡ_ㅡ+

  • Profile
    이정욱 2011.01.19 14:46

    그냥 이곳에 댓글로 달아도 되죠 ^^ 어차피 같은 코드면 먼저 올린사람이 우선이니까요~

  • Profile
    소나기 2011.01.19 14:53

    ㅎㅎ 하긴 그렇네요. ^^

  • Profile
    소나기 2011.01.19 16:07

    // 더 최적화 하는 게 의미가 없어 보여서 그냥 기본(?)에 충실하게 올립니다. ^^

    // 음 루프 자체를 지정해 주셔서 인라인 어셈을 쓸수도 없고 음냐... 역시 실력이 부족한거 같네요. ㅠ_ㅠ

    program Project2;

    {$APPTYPE CONSOLE}

    uses
      SysUtils, MMSystem;

    procedure TestLoop;
    var
      i   : Integer;
      sum : LongInt;
    begin
      sum := 0;

      for i:=1 to 5000 do Inc(sum, i);

     

      while i <= 8000 do
        begin
          Inc(sum, i);
          inc(i);
        end;

     

      repeat
        Inc(sum, i);
        Inc(i);
      until(i > 10000);

     

      Writeln(IntToStr(sum));
    end;

    begin
      TestLoop;
      Readln;
    end.

  • Profile
    zeliard 2011.01.19 19:59

    집에가서 해봐야겠군요.... 그래도 가장 일반적인 답변이 이미 나와서... 어떻게 바꿀까 고민 좀 해야 겠네요.

  • Profile
    치꼬 2011.01.20 00:33

    보통 1~N 까지의 합은 N*(N+1)/2 로 계산하면 나오는데요. 이걸 루프문으로 어떻게 빨리 돌릴까 생각하니..

    개인적으로 플밍 실력이 딸리는지라.. 꽁수(?)를 써서.. 반절만 돌리게 아래와 같이하는건 반칙이겠죠 ㅡㅡ''


    var

     i : integer;

     min_num, max_num : Integer;

     sum_num : integer;

     avg_num : integer;

    begin


     sum_num := 0;


     min_num := 1;

     max_num := 5000;

     avg_num := min_num + max_num;


     for i:= 1 to (max_num - (min_num-1)) div 2 do

       inc(sum_num, avg_num);


     //memo1.lines.add('~5000 :' + inttostr(sum_num) + ' ' + inttostr(avg_num) + ' ' + inttostr((max_num - min_num-1) div 2) );


     min_num := 5001;

     max_num := 8000;

     avg_num := min_num + max_num;

     i := 1;


     while i <= (max_num - (min_num -1)) div 2 do begin

       inc(sum_num, avg_num);

       inc(i);

     end;


     //memo1.lines.add('~8000 :' + inttostr(sum_num) + ' ' + inttostr(avg_num) + ' ' + inttostr((max_num - (min_num -1)) div 2 ));


     min_num := 8001;

     max_num := 10000;

     avg_num := min_num + max_num;

     i := 1;


     repeat

       inc(sum_num, avg_num);

       inc(i);

     until (i > (max_num - (min_num -1)) div 2);


     //memo1.lines.add('~10000 :' + inttostr(sum_num) + ' ' + inttostr(avg_num) + ' ' + inttostr((max_num - (min_num -1)) div 2) );


     showmessage(inttostr(sum_num));


  • Profile
    백록화 2011.01.20 07:12

    아 공식이 있군요..-.-a 멋지네영..저런수가 있었다니...ㄷㄷㄷ


    저도 루프를 반으로 줄여서 해봤는데...시간단축이 영 시원찮아서 -.-;;; 게다가 본문제와는 상관(?)없는거지만은 max_num 이 홀수가 된다면... orz... 돼서...ㅋㅋ 머...당연한건가? ㅋ


     

  • Profile
    치꼬 2011.01.20 18:19

    네.. 홀수가 나오면 쫌 그렇죠. 하지만.. 조건이 주어진상태라.. 조건에 충실하고자 했음. 

    실력을 환경으로 돌리는 ㅡㅡ''

  • Profile
    소나기 2011.01.20 03:20

    그나저나 치코님 스타일로 하나 작성해 볼까 ㅎㅎ

    사실 내부 루프에 더하기 몇개 더 넣어주는 신공을 하면 아주 조금은 빨라지지만 음 의미가 있을지 ㅡ_ㅡ;;

     

    그리고 요즘 같이 멀티 코어이면 사실 루프를 나누어서 따로 돌리는 게 빠를텐데 델파이가 멀티코어를 지원하나요 ?

    그걸 모르겠네요. ㅠ_ㅠ

  • Profile
    치꼬 2011.01.20 04:09

    일단은 소나기님하고, 용일님이 1,2등 드시고, 접수자가 저까지 딱 3명만 되면.. 꽁수라도.. 3등 50점 주시겠죠 ㅡㅡ''


  • Profile
    소나기 2011.01.20 08:22
    program Project3;
    {$APPTYPE CONSOLE}
    uses
      SysUtils,
      Classes;
    type
     TForThread = class(TThread)
      Public
        Sum : Integer;
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
     TWhileThread = class(TThread)
      Public
        Sum : Integer;
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
     TrepeatThread = class(TThread)
      Public
        Sum : Integer;
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
    { TForThread }
    procedure TForThread.Execute;
    var
     i : Integer;
    begin
      inherited;
      Sum :=0;
      for i := 0 to 5000 do Inc(Sum, i);
      Terminate;
    end;
    
    { TWhileThread }
    procedure TWhileThread.Execute;
    var
      i : Integer;
    begin
      inherited;
      i := 5001;
      Sum :=0;
      while i <= 8000 do
        begin
          Inc(Sum, i);
          inc(i);
        end;
      Terminate;
    end;
    { TRepeatThread }
    procedure TrepeatThread.Execute;
    var
      i : Integer;
    begin
      inherited;
      Sum :=0;
      i := 8001;
      repeat
        Inc(Sum, i);
        Inc(i);
      until(i > 10000);
      Terminate;
    end;
    var
      Thread1 : TForThread;
      Thread2 : TWhileThread;
      Thread3 : TrepeatThread;
    begin
      Thread1 := TForThread.Create(False);
      Thread2 := TWhileThread.Create(False);
      Thread3 := TrepeatThread.Create(False);
      repeat
      until (Thread1.Terminated and Thread2.Terminated and Thread3.Terminated);
      Writeln(IntToStr(Thread1.Sum + Thread2.Sum + Thread3.Sum));
      Readln;
    end.


    그냥 심심해서 간단하게 테스트 하나 더 해봤습니다.

    그냥 마구 짠거라 뭐라고 하지는 마시고요. 음 역씨 멀티 코어라 쓰레드로 구성해서 돌리니 빠르네요.

    음 100000 번 돌리니 1초 정도 차이 나네요.

     

  • Profile
    치꼬 2011.01.20 18:18

    헉 쓰레드 좋다..

  • Profile
    이정욱 2011.01.22 01:13

    소나기님과 치꼬님 각각 200, 150 점 씩 드렸습니다~

  • Profile
    소나기 2011.01.22 02:22

    감사합니다. 꾸뻑

     

    그나저나 참여율이 저조해서 ㅠ_ㅠ

     

    이정욱님이 애쓰시는 모습이 보이는 데 다들 좀 분발합시다.. 아자 아자 ^^

  • Profile
    치꼬 2011.01.22 03:42

    엇... 참여점수 감사 ㅡㅡ''

  • Profile
    중현 2011.02.09 19:34

    재미있는 이벤트네요...

    • 이정욱
    • 2011.07.01 05:25
    • 8 COMMENTS
    • /
    • 0 LIKES
    • 블랙돌
      2011.07.01 06:58
      휴.. 다행이네요 ^^  수고하셨어요 ㅋ
    • 수인아빠
      2011.07.01 17:23
      수고하셨습니다.~~~
    • 심즈
      2011.07.01 18:59
      다행이네요.. 복구하느라 수고하셨습니다...^^
    • phono
      2011.07.01 19:51
      워쩐지  엇그제 접속하려고 했는데..  접속이 안되더군요..고생하셨습니다. ^^
    • 꿈을가꾸는정원사
      2011.07.02 10:11
      고생하셨습니다 : )
    • 소나기
      2011.07.02 18:21
      그런일이 있었군요. 고생하셨습니다. ^^
    • 백록화
      2011.07.05 19:25
      고생많으셨습니다. ㅎ 매번 데이터베이스가 말썽이군요.. 
    • • • •
    • 델탐
      2011.03.03 22:24
      등록할려고 등록하기 눌렀더니 데이브기어 홈피나오는데...ㅡㅡ;; 어디다가 등록???
    • 이정욱
      2011.03.04 02:54
      ㅋ 수정했어요 ^^
    • 델탐
      2011.03.04 20:20
      올~~~ 땡큐여~~ 그때 뵈여~
    • 이정욱
    • 2011.02.23 10:47
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 치꼬
      2011.02.23 21:33
      회비는 어떻게 되나요? ㅡㅡ''
    • 이정욱
      2011.02.24 11:14
      1/n 입니다~~~ 히히
    • 라벤더
      2011.02.23 22:19
      헐.... 저 회사 워크샵 가는 날...ㅜ_ㅜ
    • 이정욱
      2011.02.24 11:13
      헐.. 라벤더님때문에 잡은 날인데.ㅡㅡ; 옮겨야 하나요? ㅡㅡ; 날짜 알려주세요!
    • 라벤더
      2011.02.25 19:41
      현재로선 3월 18일이 괜찮습니당.저 때문에.. 죄송죄송=_= 어흑.
    • 이정욱
    • 2011.02.01 16:36
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 소나기
      2011.02.01 22:44
      ^^ 새해 복 많이 받으세요.   하시는 일 마다 모두 다 잘되시실 빕니다. 
    • 동그랑땡
      2011.02.01 23:03
      새해 복 많이 받으세요~~~
    • 치꼬
      2011.02.02 03:25
      새해 일 복(?) 많이 받으세요
    • 라벤더
      2011.02.02 20:54
      새해 복 많이 받으세요!! >_<
    • 이정욱
    • 2011.01.26 12:20
    • 11 COMMENTS
    • /
    • 0 LIKES
    • 치꼬
      2011.01.26 22:20
      치킨 무한 리필 되나요?
    • 이정욱
      2011.01.26 23:24
      동생이 하더라도.. 돈은 내야하게 땜시... ㅋ 대신 굉장히 알려진 맛집이에요 ㅋㅋ 1/n 입니다~ 우하핫!
    • 라벤더
      2011.01.27 02:19
      오옷.. 드디어 대림동 한 번 가는건가요~!저는 평일이면 조율이 가능할 것 같고, 주말이면 일단 2월은 둘째...
    • 이정욱
      2011.01.30 09:25
      하게되면 금요일 정도가 될거 같아요~ 시간은 몇시쯤이 되면 조율이 가능한가요?~
    • 라벤더
      2011.01.31 05:33
      금요일이면.. 8시정도까지 대림동 갈 수 있을 거에요~!
    • 소나기
      2011.01.27 02:26
      서울에 사시는 분들은 좋겠습니다. ㅠ_ㅠ   아 부러워.
    • 구창민
      2011.01.27 03:32
      쩝.. 일이 산더미같이 쌓여서... 일단 병부잡이랑 의논해보겠습니다~ ㅎㅎ
    • • • •