Пля объясняю же что if вообще не надо задача в одно действие если у меня правельно получилось проверь сам(может и не так 1мин думал)
h(f)ucker Не так. У тебя не правильное решение, оно выдает при вводе 2 - 8, при вводе 4 - 40. Что-то у тебя не так. Люди, помогите кто-то плиз......
Извини, не заметил отредактированного сообщения. Теперь онлайн компилятор говорит "Частично засчитано (15%)". ( У меня с ифом 10 было...
program point; var R:integer; begin writeln('Vvedite radius'); readln(R); writeln(R*R+(R-1)*(R-1)); readln; end.
Dosia Спасибо.... но чтобы правильно заработало пришлось довести до такого вида: Потому что у вас значение радиуса смещалось на единицу. Но решение все равно не правильное(( Проходит только 3 теста из 20 - 15% Помогите, кто нибудь!!!!
ссылку мне на проверку и все будет. Не понятно что вы имеете в виду под словом смещение, программа работала абсолютно корректно: R = 1 N =1 R = 2 N =5 R = 3 N = 13 R = 4 N = 25 R = 5 N = 41 Эти слова напомнили мне олимпиаду по информатике, если так, то возможно данные должны быть считанны из файла и после записаны в него? В любом случае надо посмотреть где вы там проверяете правильность работы программы.
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 Это не олимпиада, а онлайн контестер, в нем пишется таким образом стандартно.
будет 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 шоколадных плитки, при решении задачи уровня начальной школы =)
я остался 1 время уже позднее, пытаюсь оптимизировать быдлокод, чтобы быстрее работал. Можно попробовать заменить integer на LongInt, так по сути будет правильнее, щас будет вариант оптимизированный для больших чисел.
Не получается ниче =( Что то типо того должно быть: 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. Смысл в том, чтобы для больших чисел просчитать квадрат который точно можно вычислить, а остатки уже считать в цикле.
Попробуй этот алгоритм: 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 - количество точек Итог:
ты хотя бы смотрел что выше было написано? надо чтобы код выполнялся быстрей, а еще лучше вывести формулу. Сравни мой код: 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;
(что именно непонятно? конкретные вопросы?) edit:не заметил вопроса вот первое, что выдал google: klick всё прекрасно разъяснено.