2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Задача про апельсин
Сообщение27.10.2009, 22:23 
Чебурашка и Гена нашли большой апельсин и решили его разделить на несколько равных частей. Для этого они решили сделать N разрезов проходящих через одну из центральных осей апельсина (можно считать, что апельсин имеет форму шара). Ваша задача определить, сколько своих друзей Гена и Чебурашка смогут накормить (целое число F, равное количеству частей, на которые будет разрезан апельсин), а также объем V и площадь поверхности S каждой дольки апельсина.

Входные данные:
Входной файл содержит два целых числа разделенных пробелом: N (0 <= N <= 1000) - количество разрезов и R (0 < R <= 10^4) - радиус апельсина.

Выходные данные:
Выходной файл должен содержать целое число F и действительные числа V и S. Числа следует разделять одним пробелом. Объем и площадь надо вывести с точностью до 7 знаков.

Пример

Ввод
0 1
Вывод
1 4.1887902 12.5663706

Код:
Var k,l,n,r:longint;
v,s:real;
Begin
read(n,r);
k:=0;
if n=0 then k:=1 else k:=2*n; {k-количество долек}
v:=(4/3*pi*r*r*r)/k;
if k=1 then s:=4*pi*r*r
else s:=(4*pi*r*r)/k+pi*r*r;
write(k,' ',v:0:7,' ',s:0:7)
end.

Половина тестов выдает неверный результат, не подскажите что я не учитываю?

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:32 
Приведите, пожалуйста, один какой-нибудь правильный результат и один неправильный (для небольших N) вместе с исходными данными.

Кстати, я бы 4/3 лучше как 4.0/3.0 записал - просто на всякий случай.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:35 
А радиус случайно не может быть нецелым?

-- Вт окт 27, 2009 15:36:43 --

Maslov в сообщении #255717 писал(а):
Кстати, я бы 4/3 лучше как 4.0/3.0 записал - просто на всякий случай.
Вроде, в Паскале деление всегда с плавающей точкой.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:37 
venco в сообщении #255721 писал(а):
А радиус случайно не может быть нецелым?
По условию - целый.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:41 
Дело в том, что я не знаю для каких входных наборов код работает неверно, тестовая программа сообщает лишь верный ответ или нет.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:43 
The_Great_Satan в сообщении #255725 писал(а):
Дело в том, что я не знаю для каких входных наборов код работает неверно, тестовая программа сообщает лишь верный ответ или нет.
А вручную посчитать и сравнить не пробовали?

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:45 
Если не ошибаюсь, требуемая точность вычислений - $10^{-20}$, а тип Real такой точности не даст.

Максимальный объём - $\frac{4\pi}3 (10^4)^3 = 4.2\cdot 10^{12}$.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:46 
Попробуйте real на double поменять. real - такой странноватый тип.

-- Вт окт 27, 2009 22:48:10 --

venco, признаю - Вы раньше успели :)

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:49 
Maslov в сообщении #255732 писал(а):
Попробуйте real на double поменять. real - такой странноватый тип.

-- Вт окт 27, 2009 22:48:10 --

venco, признаю - Вы раньше успели :)

А double тоже не даст такой точности. long double - на пределе.

-- Вт окт 27, 2009 15:53:14 --

The_Great_Satan в сообщении #255713 писал(а):
Объем и площадь надо вывести с точностью до 7 знаков.
Кстати, если понимать как до 7-ми знаков мантиссы, а не после запятой, то надо просто фроматирование поменять, т.к. в результате могут быть и маленькие числа.

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:55 
venco в сообщении #255736 писал(а):
А double тоже не даст такой точности. long double - на пределе.
Я думаю, тут главное - чтобы использовался тот же тип, что и в "проверочной" версии программы.

-- Вт окт 27, 2009 23:02:25 --

venco в сообщении #255736 писал(а):
А double тоже не даст такой точности. long double - на пределе.
venco, а зачем для 7 верных знаков такая безумная точность?

 
 
 
 Re: Задача про апельсин
Сообщение27.10.2009, 23:47 
Maslov в сообщении #255742 писал(а):
venco в сообщении #255736 писал(а):
А double тоже не даст такой точности. long double - на пределе.
Я думаю, тут главное - чтобы использовался тот же тип, что и в "проверочной" версии программы.
Это да. Цель ведь не решить задачу правильно, а получить тот же ответ, что и у тестового решения. :)

Maslov в сообщении #255742 писал(а):
venco в сообщении #255736 писал(а):
А double тоже не даст такой точности. long double - на пределе.
venco, а зачем для 7 верных знаков такая безумная точность?
Всё зависит от того, как понимать "7 верных знаков".
Если 7 знаков после запятой, то суммарная точность нужна будет 20 знаков. Именно на этот вариант намекает ответ в примере.
А если понимать как 7 знаков мантиссы в 'scientific notation', то и исходного Real должно хватить.

 
 
 
 Re: Задача про апельсин
Сообщение28.10.2009, 07:52 
The_Great_Satan в сообщении #255713 писал(а):
Половина тестов выдает неверный результат, не подскажите что я не учитываю?

При $r=10^4$ выражение r*r*r может, в принципе, вызвать переполнение в типе longint (кто знает, в каком порядке транслятор перемножает). Надёжнее записать, например, как (4*pi*r*r)*r.

Да, и ещё вот что. Вы уверены, что к-во долек -- обязательно чётное? т.е. что под "разрезом" понимается именно круг, а не полукруг?

И ещё. "До 7-ми знаков" -- это, естественно, мантисса, а не после запятой. Тогда надо писать что-нибудь вроде write(s:13). Хотя непонятно, что в точности проверяет тестовая программа и какой формат вывода она ожидает.

 
 
 
 Re: Задача про апельсин
Сообщение28.10.2009, 14:52 
ewert в сообщении #255821 писал(а):
При $r=10^4$ выражение r*r*r может, в принципе, вызвать переполнение в типе longint (кто знает, в каком порядке транслятор перемножает). Надёжнее записать, например, как (4*pi*r*r)*r.
Умножение и деление - лево-ассоциативны. Поэтому после первого же деления в (4/3*pi*r*r*r) результат - Real, и дальше будет также Real.

 
 
 
 Re: Задача про апельсин
Сообщение28.10.2009, 16:30 
Аватара пользователя
На всякий случай добавлю, что в Си необходимо явно приводить к типу с плавающей точкой, иначе все операции будут проводиться над целыми типами.

 
 
 
 Re: Задача про апельсин
Сообщение29.10.2009, 11:11 
venco в сообщении #255936 писал(а):
Умножение и деление - лево-ассоциативны. Поэтому после первого же деления в (4/3*pi*r*r*r) результат - Real, и дальше будет также Real.

Да, так и должно быть. Но: кто его разберёт, этого транслятора? А вдруг он в целях оптимизации решит объединить целочисленные операции.

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group