ВУЗ:
Составители:
Рубрика:
128
до 9, в третьем - десятки от 0 до 9, в четвертом цикле - единицы от 0 до 9.
Исходным значением искомого отношения может быть ноль.
{ фрагмент 52 }
y:=0; { начальное значение отношения }
a:=0; { искомое число }
for i:=1 to 9 do
for j:=0 to 9 do
for k:=0 to 9 do
for l:=0 to 9 do
begin s:=i+j+k+l;
x:=((10*i+j)*10+k)*10+l;
if y<s/x then begin y:=s/x; a:=x end
end.
Пример 10.52. Найти все натуральные трехзначные числа, каждое из которых
обладает двумя следующими свойствами:
- первая цифра в три раза меньше последней его цифры;
- сумма самого числа с числом, получающимся из него перестановкой второй и
третьей его цифр, делится на 8 без остатка.
Решение. Простое решение можно получить по аналогии с предыдущим:
{ фрагмент 53 }
for i:=1 to 9 do { цифра сотен }
for j:=0 to 9 do { цифра десятков }
for k:=0 to 9 do { цифра единиц }
if (i=3*k) and ((100*i+10*j+k+100*i+10*k+j) mod 8=0)
then write(i,j,k,' ').
Посмотрим, каким образом можно уменьшить перебор. Если цифра сотен в три
раза меньше цифры единиц, то k=3*i. Поскольку k - цифра, то k=3*i<=9 или i<=3.
Рассмотрим второе условие, приведем в нем подобные члены:
(100*i+10*j+3*i+100*i+10*3*i+j) mod 8=0 => (200*i+33*i+11*j) mod 8=0.
Поскольку 200*i делится
на 8, то его можно отбросить. Таким образом, нужно
проверять условие (33*i+11*j) mod 8=0 или 11*(3*i+j) mod 8=0. Получаем
следующий фрагмент программы:
{ фрагмент 54 }
for i:=1 to 3 do
for j:=0 to 9 do
if (3*i+j) mod 8=0
then write(i,j,3*i).
Пример 10.53. Найти все пятизначные числа вида 5m27n (m и n - цифры!),
которые делятся на 15.
Решение. Легко построить полный перебор всех возможных случаев.
{ фрагмент 55 }
for n:=0 to 9 do
for m:=0 to 9 do
if (50000+n*1000+270+m) mod 15=0
then write(5,n*1000+270+m,' ').
128
до 9, в третьем - десятки от 0 до 9, в четвертом цикле - единицы от 0 до 9.
Исходным значением искомого отношения может быть ноль.
{ фрагмент 52 }
y:=0; { начальное значение отношения }
a:=0; { искомое число }
for i:=1 to 9 do
for j:=0 to 9 do
for k:=0 to 9 do
for l:=0 to 9 do
begin s:=i+j+k+l;
x:=((10*i+j)*10+k)*10+l;
if y (200*i+33*i+11*j) mod 8=0.
Поскольку 200*i делится на 8, то его можно отбросить. Таким образом, нужно
проверять условие (33*i+11*j) mod 8=0 или 11*(3*i+j) mod 8=0. Получаем
следующий фрагмент программы:
{ фрагмент 54 }
for i:=1 to 3 do
for j:=0 to 9 do
if (3*i+j) mod 8=0
then write(i,j,3*i).
Пример 10.53. Найти все пятизначные числа вида 5m27n (m и n - цифры!),
которые делятся на 15.
Решение. Легко построить полный перебор всех возможных случаев.
{ фрагмент 55 }
for n:=0 to 9 do
for m:=0 to 9 do
if (50000+n*1000+270+m) mod 15=0
then write(5,n*1000+270+m,' ').
Страницы
- « первая
- ‹ предыдущая
- …
- 124
- 125
- 126
- 127
- 128
- …
- следующая ›
- последняя »
