Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 17:49   #1
LuLu53
Новичок
Джуниор
 
Регистрация: 07.10.2012
Сообщений: 3
Вопрос Задача с ветвлением и файлами (Pascal) - разрезать круглый торт на N равных частей

Задача легкая, вроде бы решил. Электронная система проверок делает 10 тестов и на 10 дает ошибку =( не пойму что не так. Даже условие лишнее добавил (N<=1000).
Задача:
На свой день рождения Петя купил красивый и вкусный торт, который имел идеально круглую форму. Петя не знал, сколько гостей придет на его день рождения, поэтому вынужден был разработать алгоритм, согласно которому он сможет быстро разрезать торт на N равных частей. Следует учесть, что разрезы торта можно производить как по радиусу, так и по диаметру. Помогите Пете решить эту задачу, определив наименьшее число разрезов торта по заданному числу гостей.

Входные данные
Входной файл INPUT.TXT содержит натуральное число N – число гостей, включая самого виновника торжества (N <= 1000).

Выходные данные
В выходной файл OUTPUT.TXT выведите минимально возможное число разрезов торта.
Код:
program Z_1;
Var n,k:integer;
begin
     assign(input,'input.txt');
     reset(input);
     assign(output,'output.txt');
     rewrite(output);
     read(n);
     if (n>0) and (n<>1) and (n<=1000) then
     begin
     if (n mod 2 = 0) then
     k:=n div 2
     else
     k:=n;
     end;
     write(k);
end.
LuLu53 вне форума Ответить с цитированием
Старый 07.10.2012, 18:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Логика вроде правильная...
А как выглядит ошибка, которую генерирует твоя проверочная система?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2012, 18:45   #3
LuLu53
Новичок
Джуниор
 
Регистрация: 07.10.2012
Сообщений: 3
По умолчанию

Пишет что ответ не правильный(
именно на 10 тесте, не представляю что там за значение они могли использовать.
LuLu53 вне форума Ответить с цитированием
Старый 07.10.2012, 18:50   #4
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

может случай когда никто не пришел N=1 (N <= 1000).
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 07.10.2012, 18:53   #5
LuLu53
Новичок
Джуниор
 
Регистрация: 07.10.2012
Сообщений: 3
По умолчанию

Код:
 if (n>0) and (n<>1) and (n<=1000)
если n=1 то он выведет ноль т.к. не надо резать. Или не?
LuLu53 вне форума Ответить с цитированием
Старый 07.10.2012, 19:32   #6
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

все верно
я имел ввиду,что при вводе 0 тоже выдает 0 , равно как и при вводе 1001
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 11.10.2017, 23:10   #7
Bessяка
Новичок
Джуниор
 
Регистрация: 11.10.2017
Сообщений: 1
По умолчанию

Дело в том, что после 8 кусков кол-во порезов торта на четное кол-во людей не будет равно "n div 2", а будет также равно "k:=n". По логике на равные куски с четным кол-вом пореза торта, после 8, можно делить только степени 2 (16,32...). Предположим что на проверку взяли число 10, ваша программа выдаст 5, но ответ не правильны, ведь куски будут разного размера.

Последний раз редактировалось Bessяка; 11.10.2017 в 23:16.
Bessяка вне форума Ответить с цитированием
Старый 12.10.2017, 10:15   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Bessяка Посмотреть сообщение
Дело в том, что после 8 кусков кол-во порезов торта на четное кол-во людей не будет равно "n div 2", а будет также равно "k:=n".
ничего не понял.

во-первых, зачем Вы подняли тему 2012 года?

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

следовательно, решение:

Если N==1, то 0 разрезов
Если N четное, то ответ N/2 разрезов по диаметру
Если N нечетное — N разрезов по радиусу
всё.

Вам картинку нарисовать или сами разберётесь?

p.s. для решения задачи можно использовать такой код (http://acmu.ru/asp/champ/index.asp?m...nload&id=429):
Код:
var
 n : integer;
begin
 assign(input, 'input.txt'); reset(input);
 assign(output, 'output.txt'); rewrite(output);
 read(n);
 if n=1 then write(0) else
 if odd(n) then write(n) else write(n div 2);
 close(output)
end.

Последний раз редактировалось Serge_Bliznykov; 12.10.2017 в 10:23.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Петя ест один торт за T1, вася за T2, гена за T3. Пользователь вводит три числа и нужно узнать, сколько они будут есть один торт. Chaffee Паскаль, Turbo Pascal, PascalABC.NET 10 18.01.2016 08:48
Задача - в зале с колоннами разместить круглый бассейн Klausms Фриланс 2 20.11.2012 21:31
Работа с файлами, преобразование частей строк в переменные... InCun PHP 12 09.05.2009 23:36
сколькими способами можно разрезать прямоугольник на n-ное количество частей? 4ingiz Общие вопросы Delphi 2 31.01.2008 06:40
КАК поделить цыферблат часов на 10 равных частей? VALIK Общие вопросы Delphi 4 28.02.2007 19:51