ВУЗ:
Составители:
Рубрика:
129
Попытаемся уменьшить перебор. Заметим, что число делится на 15, если оно
делится на 5 и 3 (15=5·3). Число делится на 5, если оно оканчивается на 0 или 5.
Следовательно, значениями m могут быть только цифры 0 или 5. Число делится на
3, если сумма его цифр делится на 3. Три цифры числа известны, их сумма равна
5+2+7=14. Если m=0, то сумма равна 14
и нужно подобрать такое n, чтобы сумма
была кратна 3. Отсюда значение n изменяется от 1 до 9 (это цифра!) с шагом 3.
Если m=5, то сумма четырех цифр равна 19, следовательно, n изменяется от 2 до 9
с шагом 3. После этих рассуждений перебор свелся к перебору непосредственно
решений задачи.
{ фрагмент 56 }
n:=1;
while n<=9 do
begin write(5,n,270,' ');
n:=n+3
end;
writeln;
n:=2;
while n<=9 do
begin write(5,n,275,' ');
n:=n+3
end.
Пример 10.54. Последовательность перестановок на множестве {1, 2, ..., n}
представлена в лексикографическом порядке, если она записана в порядке
возрастания получающихся чисел. Например, лексикографическая
последовательность перестановок трех элементов имеет вид 123, 132, 213, 231, 312,
321. Сформировать все k-элементные перестановки множества {1, 2, 3, ..., n} в
лексикографическом порядке.
Решение. Для хранения перестановок будем использовать массив (см.
следующую главу).
{ фрагмент 57 }
const nn=100;
type mas=array[1..nn] of integer;
var a:mas;
i,j,k,n,p:integer;
begin
write('Введите n и k ');readln(n,k);
for i:=1 to k do a[i]:=i;
p:=k;
while p>=1 do
begin
for j:=1 to k do write(a[j],' ');writeln;
if a[k]=n then p:=p-1 else p:=k;
if p>=1
then for i:=k downto p do a[i]:=a[p]+i-p+1;
end
end.
129
Попытаемся уменьшить перебор. Заметим, что число делится на 15, если оно
делится на 5 и 3 (15=5·3). Число делится на 5, если оно оканчивается на 0 или 5.
Следовательно, значениями m могут быть только цифры 0 или 5. Число делится на
3, если сумма его цифр делится на 3. Три цифры числа известны, их сумма равна
5+2+7=14. Если m=0, то сумма равна 14 и нужно подобрать такое n, чтобы сумма
была кратна 3. Отсюда значение n изменяется от 1 до 9 (это цифра!) с шагом 3.
Если m=5, то сумма четырех цифр равна 19, следовательно, n изменяется от 2 до 9
с шагом 3. После этих рассуждений перебор свелся к перебору непосредственно
решений задачи.
{ фрагмент 56 }
n:=1;
while n<=9 do
begin write(5,n,270,' ');
n:=n+3
end;
writeln;
n:=2;
while n<=9 do
begin write(5,n,275,' ');
n:=n+3
end.
Пример 10.54. Последовательность перестановок на множестве {1, 2, ..., n}
представлена в лексикографическом порядке, если она записана в порядке
возрастания получающихся чисел. Например, лексикографическая
последовательность перестановок трех элементов имеет вид 123, 132, 213, 231, 312,
321. Сформировать все k-элементные перестановки множества {1, 2, 3, ..., n} в
лексикографическом порядке.
Решение. Для хранения перестановок будем использовать массив (см.
следующую главу).
{ фрагмент 57 }
const nn=100;
type mas=array[1..nn] of integer;
var a:mas;
i,j,k,n,p:integer;
begin
write('Введите n и k ');readln(n,k);
for i:=1 to k do a[i]:=i;
p:=k;
while p>=1 do
begin
for j:=1 to k do write(a[j],' ');writeln;
if a[k]=n then p:=p-1 else p:=k;
if p>=1
then for i:=k downto p do a[i]:=a[p]+i-p+1;
end
end.
Страницы
- « первая
- ‹ предыдущая
- …
- 125
- 126
- 127
- 128
- 129
- …
- следующая ›
- последняя »
