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.01.19 06:11
    • 17 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2011.01.19 13:26
      제출은 어떻게 언제까지 하나요? 코드만 올리나요?
    • 소나기
      2011.01.19 14:26
      음 재미 있겠네요. 댓글로 달면 아무래도 보고하게 될꺼 같은데.. ㅡ_ㅡ+
    • 이정욱
      2011.01.19 14:46
      그냥 이곳에 댓글로 달아도 되죠 ^^ 어차피 같은 코드면 먼저 올린사람이 우선이니까요~
    • 소나기
      2011.01.19 14:53
      ㅎㅎ 하긴 그렇네요. ^^
    • 소나기
      2011.01.19 16:07
      // 더 최적화 하는 게 의미가 없어 보여서 그냥 기본(?)에 충실하게 올립니다. ^^ // 음 루프 자체를 지정...
    • zeliard
      2011.01.19 19:59
      집에가서 해봐야겠군요.... 그래도 가장 일반적인 답변이 이미 나와서... 어떻게 바꿀까 고민 좀 해야 겠네요.
    • 치꼬
      2011.01.20 00:33
      보통 1~N 까지의 합은 N*(N+1)/2 로 계산하면 나오는데요. 이걸 루프문으로 어떻게 빨리 돌릴까 생각하니.....
    • • • •
    • 이정욱
    • 2010.12.30 03:58
    • 27 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2010.12.30 05:20
      파티원 모집합니다...화력팟 짜봐요..ㅎ 
    • 구창민
      2010.12.30 08:24
      법사 자리있나요.. 딜 자신있습니다~
    • 소나기
      2010.12.30 08:25
      아 자료실에서 자료를 받으면 포인트가 내려 가는 군요.   음 그냥 몇 개 뭐가 있나 받았다가 포인트...
    • 오호
      2010.12.30 17:35
      아... 포인트는 그냥 있는 것인줄 알았네요.....역시 아무 이유없이 존재하는 것은 없는 것인가요... ^^;
    • phono
      2010.12.30 18:41
      도전해 봐야겠군욤.. ^^
    • 치꼬
      2010.12.30 19:10
      방특전사 자리있을까요? 창민님 어글 감당할 자신있습니다. ㅡㅡ'''
    • 라벤더
      2010.12.30 19:22
      앗... 전 힐링 전문인데~ 자리 있을까요? ㅋㅋ
    • • • •
    • 이정욱
    • 2010.12.27 23:57
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
    • 2010.12.26 01:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소나기
      2010.12.27 19:43
      한델이 아직 좀 적응이 안되지만 정욱님 고생의 흔적이 여기저기 있는거 같네요.   연말 잘보내시고요...
    • 이정욱
    • 2010.12.25 21:28
    • 5 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.12.26 01:10
      영자님 기존 포인트는  모두 클리어 된건가요.. ㅠ.ㅠ
    • 이정욱
      2010.12.26 01:39
      포인트는 필요하신 만큼 충분히 쌓으실 수 있으세요 ㅋ회원 DB를 안가져왔으니... 포인트는 현재 새출발 하...
    • phono
      2010.12.26 15:43
      어떻게 도와 드려야 될지..
    • 이정욱
      2010.12.27 00:04
      자유게시판 관리인거죠 모 ㅋ 제가 권한을 드리게 되면, 필요없는 글 올라오는거 삭제해주시고 활성화 될수...
    • phono
      2010.12.28 02:16
      갑자기 감투를 쓰라고 하시니 대략 난감  ㅠ.ㅠ