Вы
читаете пятнадцатый выпуск рассылки "Олимпиадные
задачи с решениями на Turbo Pascal". В этом номере
предлагаем для разбора задачу "Счастливые
билеты".
Счастливые
билеты 2 (3 уровень)
Условие:
Необходимо посчитать
количество "счастливых" билетов с заданной
суммой цифр, среди тех, номер которых состоит из
2*N разрядов. "Счастливым" является билет, у
которого сумма первых N цифр равна сумме N
последних цифр.
Технические
требования:
Во входном файле находятся два числа
разделенных пробелом: первое - N (1<=N<=50); второе -
сумма цифр интересующих нас билетов
(неотрицательное число не превосходящее 1000).
В качестве ответа необходимо вывести найденное
число "счастливых" билетов.
Пример файлов входных и выходных данных:
Решение:
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.
Реклама
в рассылке:
Рассылки проекта Sapisoft:
Всегда
рады видеть Вас на нашем сайте. Жду ваших
предложений и замечаний, Шамис Алексей