
Правильная дробь называется интересной, если после вычеркивания в числителе и знаменателе всех
одинаковых цифр ее значение не изменяется. Например, интересной будет дробь , дробь интересной не является. Вывести на экран все интересные дроби, знаменатель которых не превосходит 500. (Pascal ABC)

Ответы на вопрос

newd, rez: real; // rez - здесь хранится результат деления числителя на знаменатель; newd - здесь хранится результат деления числителя на знаменатель при условии, что вычеркнуты цифры в rez
A, B, si, sj, nis, njs: string; // A, B, si, sj - временные переменные для хранения числителя и знаменателя в формате строк; nis, njs - переменные для хранения НОВОГО числителя и знаменателя в формате строк; W - просто строка, выводящая результат
W: array[1..10000] of string; // массив, сравнивающий строки для вывода уникальных
begin
p := 2;
for i := 10 to 500 do // начало цикла, перебирающего все числа до числа 500/500
for j := 10 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 ); // и вычеркивается в знаменателе
ni := StrToInt( nis ); // новое число уже БЕЗ одинаковых цифр цифр
nj := StrToInt( njs );
newd := ni / nj; // результат деления нового числа, грубо говоря тут 4/8 (по примеру)
if ( newd = rez ) then begin // если результат деления числа равен результату деления нового числа (которые без одинаковых цифр), то выводим интересную дробь
W[p] := IntToStr(i) + '/' + IntToStr(j) + ' = ' + IntToStr(ni) + '/' + IntToStr(nj);
if ( W[p] <> W[p - 1] ) then begin writeln(W[p]);
inc(p);
end;
end;
end;
end;
end;
end.



Для решения этой задачи можно использовать язык программирования Pascal. Вот пример решения:
``` program InterestingFractions;
var numerator, denominator, i, j, removedDigit: integer; fractionValue: real;
begin for denominator := 1 to 500 do begin for numerator := 1 to denominator - 1 do begin fractionValue := numerator / denominator; for i := 0 to 9 do begin for j := 0 to 9 do begin if (numerator mod 10 = i) and (denominator mod 10 = j) then begin removedDigit := numerator mod 10; numerator := numerator div 10; denominator := denominator div 10;
if (numerator / denominator = fractionValue) and (numerator mod 10 = removedDigit) then writeln(numerator, '/', denominator);
denominator := denominator * 10 + j; numerator := numerator * 10 + i; end; end; end; end; end; end. ```
В этом решении мы используем вложенные циклы для перебора всех возможных числителей и знаменателей с ограничением до 500. Затем мы проверяем каждую комбинацию чисел на интересность. Если при удалении одинаковой цифры из числителя и знаменателя и делении числителя на знаменатель значение дроби остается неизменным, то эта дробь считается интересной и выводится на экран.


Похожие вопросы
Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili