2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Задача про апельсин
Сообщение27.10.2009, 22:23 


27/10/09
13
Чебурашка и Гена нашли большой апельсин и решили его разделить на несколько равных частей. Для этого они решили сделать 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 
Заслуженный участник


09/08/09
3438
С.Петербург
Приведите, пожалуйста, один какой-нибудь правильный результат и один неправильный (для небольших N) вместе с исходными данными.

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

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:35 
Заслуженный участник


04/05/09
4584
А радиус случайно не может быть нецелым?

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

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

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:37 
Заслуженный участник


09/08/09
3438
С.Петербург
venco в сообщении #255721 писал(а):
А радиус случайно не может быть нецелым?
По условию - целый.

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:41 


27/10/09
13
Дело в том, что я не знаю для каких входных наборов код работает неверно, тестовая программа сообщает лишь верный ответ или нет.

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:43 
Заслуженный участник


09/08/09
3438
С.Петербург
The_Great_Satan в сообщении #255725 писал(а):
Дело в том, что я не знаю для каких входных наборов код работает неверно, тестовая программа сообщает лишь верный ответ или нет.
А вручную посчитать и сравнить не пробовали?

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:45 
Заслуженный участник


04/05/09
4584
Если не ошибаюсь, требуемая точность вычислений - $10^{-20}$, а тип Real такой точности не даст.

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

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:46 
Заслуженный участник


09/08/09
3438
С.Петербург
Попробуйте real на double поменять. real - такой странноватый тип.

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

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

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 22:49 
Заслуженный участник


04/05/09
4584
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 
Заслуженный участник


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

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

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

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение27.10.2009, 23:47 
Заслуженный участник


04/05/09
4584
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 
Заслуженный участник


11/05/08
32166
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 
Заслуженный участник


04/05/09
4584
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 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
На всякий случай добавлю, что в Си необходимо явно приводить к типу с плавающей точкой, иначе все операции будут проводиться над целыми типами.

 Профиль  
                  
 
 Re: Задача про апельсин
Сообщение29.10.2009, 11:11 
Заслуженный участник


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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group