num+ den+ res = 113725

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var
i, j, lensi, lensj, k, z, ni, nj: integer; // i - числитель числа, j - знаменатель числа, k, z - счетчики циклов; lensi - длина числителя (двухзначный или трехзначный); lensj - длина знаменателя (двухзначный или трехзначный); ni и nj - числитель и знаменатели нового числа (например, было 48/98. вычеркнули 8 и 8, получилось 4/9, где ni = 4, а nj = 9)
newd, rez: real; // rez - здесь хранится результат деления числителя на знаменатель; newd - здесь хранится результат деления числителя на знаменатель при условии, что вычеркнуты цифры в rez
A, B, si, sj, nis, njs, W: string;// A, B, si, sj - временные переменные для хранения числителя и знаменателя в формате строк; nis, njs - переменные для хранения НОВОГО числителя и знаменателя в формате строк; W - просто строка, выводящая результат
cou: integer;
begin
cou := 0;
for i := 1 to 499 do // начало цикла, перебирающего все числа до числа 500/500
for j := i + 1 to 500 do
begin
rez := i / j; // здесь хранится значение деления, грубо говоря тут 49/98 (по примеру)
si := IntToStr( i ); // конвертируем числитель в строковый формат, чтобы было удобнее работать с отдельными его цифрами
sj := IntToStr( j ); // аналогично, только со знаменателем
lensi := length( si ); // узнаем длину числителя (может быть 2 или 3 - в зависимости от количества разрядов)
lensj := length( sj ); // аналогично, только со знаменателем
A := si; // создаем временные переменные, чтобы "вырезать" цифры
B := sj;
for k := 1 to lensi do // цикл сравнивания текущей цифры числителя с текущей цифрой знаменателя
for z := 1 to lensj do
begin
nis := si;
njs := sj;
if (A[ k ] = B[ z ] ) then begin// если цифра в числителе равна цифре в знаменателе
Delete( nis, k, 1 ); // то она вычеркивается в числителе
Delete( njs, z, 1 ); // и вычеркивается в знаменателе
end;
end;
if length( nis ) > 0 then begin
ni := StrToInt( nis ); // новое число уже БЕЗ одинаковых цифр цифр
nj := StrToInt( njs );
newd := ni / nj; // результат деления нового числа, грубо говоря тут 4/8 (по примеру)
if (newd = rez ) then begin// если результат деления числа равен результату деления нового числа (которые без одинаковых цифр), то выводим интересную дробь
{W := IntToStr(i) + '/' + IntToStr(j) + ' = ' + IntToStr(ni) + '/' + IntToStr(nj);
writeln(W);}
inc(cou);
end;
end;
end;
write(cou)
end.