Количество разбиений на слагаемые
Дано натуральное число N. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.
Например, для N=5 существует 7 различных разбиений:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные
Задано единственное число N≤30.
Выходные данные
Выведите количество различных разбиений на слагаемые.
//Язык Pascal
Program multiplication;
Var
code, rightAnswers, mistakes, answersCount, value1, value2, answer: integer;
Begin
Randomize;
code := 1;
rightAnswers := 0;
mistakes := 0;
answersCount := 0;
while code = 1 do
begin
Write('Проверим? ');
Readln(code);
Writeln();
if (code = 1) then
begin
value1 := random(1, 9);
value2 := random(1, 9);
Write(value1, '*', value2, ' = ');
Readln(answer);
if (answer = value1 * value2) then
begin
Writeln('Правильно!');
rightAnswers := rightAnswers + 1;
end
else
begin
Writeln('Неправильно!');
mistakes := mistakes + 1;
end;
answersCount := answersCount + 1;
Writeln();
end;
end;
Writeln('Статистика:');
Writeln('Задано вопросов: ', answersCount);
Writeln('Количество правильных ответов: ', rightAnswers);
Writeln('Число ошибок: ', mistakes);
End.
// PascalABC.NET 3.4.2, сборка 1785 от 06.09.2018
var c, w: integer;
procedure check;
begin
var (a, b) := (Random(0, 20), Random(0, 20));
Print($'{a}*{b}=');
if a * b = ReadInteger then begin inc(c); Println('Правильно') end
else begin inc(w); Println('Неправильно') end;
end;
procedure res;
begin
Println($'Задано вопросов {c+w}');
Println($'Правильных {c}({(c*100)/(c+w):f1}%)');
Println($'Неправильных {w}({(w*100)/(c+w):f1}%)');
end;
begin
var start := true;
while start do
begin
Println('Проверим?(0/1)');
if ReadInteger = 0 then
begin start := false; res; end
else check;
end;
end.
Пример в приложении.