Счастливые билеты 2 (3 уровень) |
Условие :Необходимо посчитать количество "счастливых" билетов с заданной суммой цифр, среди тех, номер которых состоит из 2*N разрядов. "Счастливым" является билет, у которого сумма первых N цифр равна сумме N последних цифр. Технические требования: Во входном файле находятся два числа разделенных пробелом: первое - N (1<=N<=50); второе - сумма цифр интересующих нас билетов (неотрицательное число не превосходящее 1000). В качестве ответа необходимо вывести найденное число "счастливых" билетов. Пример файлов входных и выходных данных: Input.txt Output.txt 2 2 4
Условию удовлетворяют билеты: 0101, 0110, 1001, 1 010.Решение: 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. |