Счастливые билеты 2 (3 уровень)

Условие:
Необходимо посчитать количество "счастливых" билетов с заданной суммой цифр, среди тех, номер которых состоит из 2*N разрядов. "Счастливым" является билет, у которого сумма первых N цифр равна сумме N последних цифр.

Технические требования:
Во входном файле находятся два числа разделенных пробелом: первое - N (1<=N<=50); второе - сумма цифр интересующих нас билетов (неотрицательное число не превосходящее 1000).
В качестве ответа необходимо вывести найденное число "счастливых" билетов.

Пример файлов входных и выходных данных:

Input.txt

Output.txt

2 2

4

 

Условию удовлетворяют билеты: 0101, 0110, 1001, 1010.

Решение:
Var
  N,S,number,i,j:integer;
  F:text;
  bilet:array [1..50] of byte;

Function Step10(n:integer):integer;{Вычисляем 10 в степени n}
var st:integer;
begin
  st:=1;
  for i:=1 to n do st:=st*10;
  step10:=st;
end;

Function Sum:integer;{Находим сумму цифр половины данного билета}
var summa:integer;
begin
  summa:=0;
  for i:=1 to n do inc(summa,bilet[i]);
  sum:=summa;
end;

Procedure Plus(k:integer);{Переходим к следующей половине билета}
begin
  if (bilet[k]<>9) then inc(bilet[k])
    else
    begin
      bilet[k]:=0;
      Plus(k-1);
    end;
end;

Begin
  assign(f,'Input.txt');
  reset(f);
  readln(f,n,s);
  close(f);
number:=0;
  s:=round(s/2);
  for j:=1 to n do bilet[j]:=0;
  for j:=1 to (step10(n)-1) do
  begin
    Plus(n);
    if (Sum=s) then inc(number);
  end;
  number:=sqr(number);
  assign(f,'Output.txt');
  rewrite(f);
  writeln(f,number);
  close(f);
End.