Я предлагаю действовать перебором. Числитель не может быть меньше 10 (т.к. двузначный). Если он 10, то после вычитания станет 9, тогда знаменатель должен стать (после удвоения) 99 (чтобы дробь стала быть равной 1/11). Но никакое целое число после удвоения не равно 99, значит 10 в качестве числителя не подходит. Берём 11. После вычитания 1 станет 10. Значит знаменатель станет 110 (опять чтобы получилось 1/11)Чтобы он (знаменатель) стал 110, первоначально он должен быть 55. Т.е. дробь 11/55 нам подходит, т.к. после преобразований она становится 10/110 = 1/11. Рассуждая дальше, найдём ещё такие числа, например 13/66 - тоже подходит, и оно меньше, чем 11/55, дальше 15/77 и оно ещё меньше, 17/88 - следующее и 19/99 - последнее, т.к. дальше пойдут трёхзначные знаменатели. И эта последняя дробь наименьшая из всех. Значит она и есть ответ. И сумма числителя и знаменателя 118
var b,i,z,k: integer;
a: array[1..10000] of integer;
begin
read(b);
z: =0;
k: =0;
while b> 0 do
begin
z: =z+1;
a[z]: = b mod 10;
b: =b div 10;
end;
for i: =2 to z-1 do
if a[i]=a[i-1] or a[i]=a[i+1] then
k: =1;
if k=1 then writeln (‘да’)
else writeln (‘нет’);
end.
второй способ:
var a,b,c: integer;
begin
read(a);
k: =0;
c: =10; // это должно быть обязательно число, но не цифра
while a > 0 do
begin
b: =a mod 10;
a: =a div 10;
if b=c then k: =1;
c: =b;
end;
if k=1 then writeln (‘да’)
else (‘нет’);
end.