Вопрос задан 08.06.2018 в 21:55. Предмет Информатика. Спрашивает Кольцова Соня.

Плиииизззз... с помощью рекурсии Дано натуральное число N. Требуется получить и вывести на экран

все возможные различные способы представления этого числа в виде суммы натуральных чисел (то есть, 1 + 2 и 2 + 1 – это один и тот же способ разложения числа 3). Решите задачу с помощью рекурсив-ной процедуры. Пример: Введите натуральное число: 4 1 + 1 + 1 + 1 1 + 1 + 2 1 + 3 2 + 2
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Филипчук Кира.

Var
  n: integer;
  a: array[1..100] of integer;
procedure gen(pos, prev, sum: integer);
var i: integer;
begin
  if sum > 0 then
  for i := prev to sum do
  begin
    a[pos] := i;
    gen(pos + 1, i, sum - i);
  end
  else if a[1] < n then
  begin
    write(a[1]);
    for i := 2 to pos - 1 do write(' + ', a[i]);
    writeln;
  end;
end;
begin
  read(n);
  gen(1, 1, n);
end.

0 0
Отвечает Болгов Данила.

//PascalABC.NET 3.1 сборка 1200
procedure Decomposition(depth, previous, rest: integer; a: string);
begin
  if rest < 0 then
    exit;
 
  if (rest = 0) and a.Contains('+') then begin
    Println(a);
    exit;
  end;
 
  for var i := previous to rest do
    Decomposition(depth + 1, i, rest - i,
      (a = '') ? i.ToString() : a + ' + ' + i.ToString());
end;

begin
  Decomposition(1, 1, ReadInteger('n ='), '');
end.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос