Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
no swear
142 / 122 / 71
Регистрация: 01.07.2016
Сообщений: 707
Завершенные тесты: 1
#1

Сколькими способами можно разложить число на слагаемые - Pascal ABC

19.08.2017, 19:38. Просмотров 370. Ответов 7
Метки нет (Все метки)

Лесенка
Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий. Требуется написать программу, вычисляющую число лесенок, которое можно построить из N кубиков.

Входные данные

Во входном файле INPUT.TXT записано натуральное число N (1 ≤ N ≤ 100) – количество кубиков в лесенке.

Выходные данные

В выходной файл OUTPUT.TXT необходимо вывести число лесенок, которые можно построить из N кубиков.
HTML5
1
2
3
INPUT.TXT                                   OUTPUT.TXT
       3                                                 2
       6                                                 4
Смысл задачи таков что надо разложить число на слагаемые так чтобы слагаемые шли в порядке возрастание. Например 5: 0 + 5 = 1 + 4 = 2 + 3. Ответ 3

Код написал но иногда правильно выводит ответ а иногда нет. Помогите исправить. Может я что - то не учитываю?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  n, k: integer;
 
function f(l, r: integer): integer;
begin
  if l > r then f := 0;
  while l < r do
  begin
    inc(l);
    f(l + 1, r - (l + 1));
    inc(k);
    dec(r);
  end;
end;
 
begin
  readln(n);
  k := 0;
  f(0, n);
  write(k);
  readln;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2017, 19:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сколькими способами можно разложить число на слагаемые (Pascal ABC):

Сколькими способами можно разложить число на простые множители?
Разложение на простые множители числа 12 можно записать тремя способами: ...

Разложить заданное число на всевозможные слагаемые использованием рекурсии
Помогите, пожалуйста. С начала семестра не могу решить задачу: разложить...

Сколькими способами можно составить треугольник?
Дан набор из N отрезков различной длины. Сколькими способами можно выбрать из...

Сколькими способами можно рассадить гостей за столом
Здравствуйте еще раз. Неделю назад писал олимпиаду по программированию. И...

Сколькими способами можно купить ровно N кг мастики, не вскрывая ящики
В магазине продается мастика в ящиках по a кг (тип 1), b кг (тип 2) и c кг (тип...

Опиределить, сколькими способами можно разделить массив (объединение кодов)
Ребят, пожалуйста, помогите, нужно объеденить оба кода в одну задачу: ...

7
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
20.08.2017, 08:07 #2
Для четных возможны равные слагаемые.
Только зачем их перебирать, если нужно только количество:
Pascal
1
2
3
4
var n: Integer;
begin
  Read(n); WriteLn(1+n div 2);
end.
1
no swear
142 / 122 / 71
Регистрация: 01.07.2016
Сообщений: 707
Завершенные тесты: 1
20.08.2017, 08:16  [ТС] #3
Мне надо перебрать все слагаемые. Ваша программа неправильно выводит ответ при 9(ответ 5), а должно быть 8 потому что вы не учитывайте таки варианты 1 + 3 + 5
0
Puporev
Модератор
54136 / 41769 / 28880
Регистрация: 18.05.2008
Сообщений: 98,312
20.08.2017, 12:24 #4
Название темы не соответствует смыслу задачи.
Посмотрите в Поиске по ключевому слову Лесенка.

Добавлено через 1 час 33 минуты
Так попробуйте.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var k: longint;
function f(l, r: integer): longint;
var i:byte;
begin
for i:=l to r do
f(i+1, r-i);
if r=0 then inc(k);
end;
var n:byte;
begin
readln(n);
f(1,n);
write(k);
end.
1
no swear
142 / 122 / 71
Регистрация: 01.07.2016
Сообщений: 707
Завершенные тесты: 1
20.08.2017, 18:41  [ТС] #5
Не могу уловить смысл вашего решения
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
1
if r=0 then inc(k);
Почему когда r равен 0 вы делаете +1
0
Puporev
Модератор
54136 / 41769 / 28880
Регистрация: 18.05.2008
Сообщений: 98,312
20.08.2017, 18:59 #6
Я просто поправил Ваш код с учетом алгоритма, написанного здесь
http://www.cyberforum.ru/cpp-beginners/thread1909791.html
Если выше нет кубиков то +1 лесенка.
1
no swear
142 / 122 / 71
Регистрация: 01.07.2016
Сообщений: 707
Завершенные тесты: 1
20.08.2017, 19:19  [ТС] #7
Не могу понять. Вообще не представляю
Объясните пожалуйста своё решение. Я одну функцию не могу переварить а там вообще их 2
Объясните на примере числа 6, как алгоритм будет работать?
0
Puporev
Модератор
54136 / 41769 / 28880
Регистрация: 18.05.2008
Сообщений: 98,312
20.08.2017, 19:55 #8
Посмотри еще это, особо пост номер 5.
http://www.cyberforum.ru/turbo-pascal/thread550152.html
Я такое решать не умею, чем смог, тем помог.
1
20.08.2017, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2017, 19:55
Привет! Вот еще темы с решениями:

Сколькими способами можно выдать один рубль, имея монеты разных номиналов
У Вас есть монеты номиналом 1, 2, 5, 10, 25 та 50 копеек в бесконечном...

Сколькими способами заданное натуральное число N можно представить в виде суммы двух кубов натуральных чисел
Собственно, нужна помощь. Сколькими способами заданное натуральное число N...

Разложить число на слагаемые
n натуральное число. Разложить число на слагаемые : 1) на два 2) на три. ...

Сколькими способами можно распределить уроки в N классах (N – четное число) между M (M=N div 2) учителями, если каждый учитель будет преподавать в дву
Добрый день, не могли бы вы мне помочь. Сколькими способами можно распределить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru