Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. h(f)ucker

    h(f)ucker Member

    Joined:
    11 Jul 2009
    Messages:
    81
    Likes Received:
    84
    Reputations:
    32
    Пля объясняю же что if вообще не надо задача в одно действие если у меня правельно получилось проверь сам(может и не так 1мин думал)
     
  2. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    h(f)ucker
    Не так. У тебя не правильное решение, оно выдает при вводе 2 - 8, при вводе 4 - 40. Что-то у тебя не так. :( Люди, помогите кто-то плиз......
     
  3. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Извини, не заметил отредактированного сообщения. Теперь онлайн компилятор говорит "Частично засчитано (15%)". ( У меня с ифом 10 было...
     
  4. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    program point;
    var
    R:integer;
    begin
    writeln('Vvedite radius');
    readln(R);
    writeln(R*R+(R-1)*(R-1));
    readln;
    end.
     
    #1624 Dosia, 7 Sep 2009
    Last edited: 7 Sep 2009
  5. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Dosia
    Спасибо.... но чтобы правильно заработало пришлось довести до такого вида:

    Потому что у вас значение радиуса смещалось на единицу. Но решение все равно не правильное(( Проходит только 3 теста из 20 - 15% :( Помогите, кто нибудь!!!!
     
  6. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    ссылку мне на проверку и все будет. Не понятно что вы имеете в виду под словом смещение, программа работала абсолютно корректно:

    R = 1 N =1
    R = 2 N =5
    R = 3 N = 13
    R = 4 N = 25
    R = 5 N = 41

    Эти слова напомнили мне олимпиаду по информатике, если так, то возможно данные должны быть считанны из файла и после записаны в него? В любом случае надо посмотреть где вы там проверяете правильность работы программы.
     
    #1626 Dosia, 7 Sep 2009
    Last edited: 7 Sep 2009
  7. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Dosia
    Да, данные считываются из файла и потом вписываются, таким вот образом:
    Code:
    var
    R:integer;
       f1,f2:text;
    begin
         assign(f1,'input.txt');
         assign(f2,'output.txt');
          reset(f1);
          rewrite(f2);
    read(f1,R);
    R:= R + 1 ;
    writeln(f2,R*R+(R-1)*(R-1));
         close(f2);
         close(f1);
    end.
    
    По поводу неккоректно:
    Условие:
    Обратите внимание на пример ввода.

    Это давалось в задаче, отредактировал первый пост. Извините что сразу не вписал. :(

    А программа должна работать на все числа до 15000, а она уже на 4 выдает неправильно, там вместо 41 должно быть 49. Посчитал вружную, попробуйте сами.


    P.S Это не олимпиада, а онлайн контестер, в нем пишется таким образом стандартно.
     
    #1627 Fantom3D, 7 Sep 2009
    Last edited: 7 Sep 2009
  8. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    Понятно, я радиус по количеству точек считал. R = 3 Соответственно будет N = 24?
     
    #1628 Dosia, 7 Sep 2009
    Last edited: 7 Sep 2009
  9. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Хм.... у меня и в моей версии программы и на листке бумаги 25 выходит...
     
  10. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    будет 29, я на листочке даже проверил, а также моя прога мне это сказала. Над ней работали 4 быдлокодера (включая меня) =))))))

    Code:
    program point;
    var
    N,R,x,y:integer;
    f1,f2:text;
    begin
    assign(f1,'input.txt');
    assign(f2,'output.txt');
    reset(f1);
    rewrite(f2);
    read(f1,R);
    for x :=-r to 0 do begin
    for y :=-r to -1 do begin
    if (x*x+y*y) <= r*r then N:=N+1;
    end;
    end;
    writeln(f2,N*4+1);
    close(f2);
    close(f1);
    readln;
    end.
    Было съедено 2 шоколадных плитки, при решении задачи уровня начальной школы =)
     
    #1630 Dosia, 7 Sep 2009
    Last edited: 7 Sep 2009
  11. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Шоколад полезен, но все же:
    [​IMG]

    Как видите, задачка далеко не начального уровня. :(

    [​IMG]

    Добейте, пожалуйста. :rolleyes: :rolleyes: :rolleyes:
     
    1 person likes this.
  12. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    я остался 1 время уже позднее, пытаюсь оптимизировать быдлокод, чтобы быстрее работал. Можно попробовать заменить integer на LongInt, так по сути будет правильнее, щас будет вариант оптимизированный для больших чисел.
     
    #1632 Dosia, 7 Sep 2009
    Last edited: 7 Sep 2009
  13. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Dosia
    Ок. Ждемсь....:)
     
  14. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    Не получается ниче =(

    Что то типо того должно быть:

    Code:
    program point;
    var
    N,R,PRE,x,y:LongInt;
    f1,f2:text;
    begin
    assign(f1,'input.txt');
    assign(f2,'output.txt');
    reset(f1);
    rewrite(f2);
    {read(f1,R);}
    readln(r);
    if R>7 then begin
    PRE:=(R*2-4)*(R*2-4);
    for x :=-r to -r+4 do begin
    for y :=-r to -r+2 do begin
    if (x*x+y*y) <= r*r then N:=N+1;
    end;
    end;
    writeln(f2,N*4+1);
    writeln('pre = ',pre);
    writeln('N= ',N);
    writeln(PRE+N*4+4);
    end
    else
    begin
    for x :=-r to 0 do begin
    for y :=-r to -1 do begin
    if (x*x+y*y) <= r*r then N:=N+1;
    end;
    end;
    writeln(f2,N*4+1);
    writeln('N= ',N*4+1);
    end;
    
    close(f2);
    close(f1);
    readln;
    end.
    Смысл в том, чтобы для больших чисел просчитать квадрат который точно можно вычислить, а остатки уже считать в цикле.
     
  15. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Так еще хуже - (30%)
     
  16. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    Попробуй этот алгоритм:

    Code:
     k := 0; 
     for i := -R to R do
       for j := -R to R do 
         if (i*i+j*j) <= Sqr(R) then k := K+1;
    
    R- радиус
    K - количество точек

    Итог:

     
  17. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    ты хотя бы смотрел что выше было написано? надо чтобы код выполнялся быстрей, а еще лучше вывести формулу. Сравни мой код:

    Code:
    for x :=-r to 0 do begin
    for y :=-r to -1 do begin
    if (x*x+y*y) <= r*r then N:=N+1;
    end;
    end;
    и твой

    мой просчитав 1 координатную четверть умножит его на 4 и прибавит 1, а твой будет просчитывать оставшиеся 3. По - моему без комментариев. Если на больших числах мой код не успевает выполнится, то твой сядет в лужу еще раньше.

    Проблема кода из поста N 14 в том что там я использую integer, и длины диапазона не хватает, настолько большие числа получаются, если заменить на LongInt, то он будет просчитывать верно, но это будет занимать существенное время и вряд ли код успел бы выполниться за отведенный промежуток времени.

    Прошел день, формулу я вывести так и не смог. Может быть позже вернусь к этому, так как задача мне понравилась =)

    Окончательный вариант кода совпадает с кодом который выбил 60%, лишь 1 небольшое отличие, которое я впринципе уже не однократно указывал выше - заменим тип integer на LongInt.


    var
    N,R,x,y:LongInt;
     
    #1637 Dosia, 7 Sep 2009
    Last edited: 8 Sep 2009
  18. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Ты гений!
    [​IMG]

    Спасибо тебе!
     
  19. Validol

    Validol Elder - Старейшина

    Joined:
    15 Dec 2006
    Messages:
    177
    Likes Received:
    57
    Reputations:
    7
    Господа, нужна помощь... C++
    Вообще не понимаю тему "Динамические структуры данных"
     
    #1639 Validol, 10 Sep 2009
    Last edited: 10 Sep 2009
  20. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    (что именно непонятно? конкретные вопросы?)
    edit:не заметил вопроса

    вот первое, что выдал google: klick
    всё прекрасно разъяснено.
     
    #1640 BrainDeaD, 10 Sep 2009
    Last edited: 10 Sep 2009
Thread Status:
Not open for further replies.