- •Комбинаторика. N-нен к элементтен тұратын комбинаторлық топтар құрастыру Терулер
- •Программасы
- •Программаны құру бойынша түсіндірмелер
- •Программасы
- •Тапсырма 5
- •Терулер және Ньютон биномы
- •Программасы
- •Программасы
- •Тапсырма 6
- •Тапсырма 7. Шахмат тақтасының 32 қара өрістерінде 12 ақ және 12 қара шашкаларды қанша әдіспен орналастыруға болады? Қосымша сабақтар үшін
- •Тапсырма 8
- •Жиі кездесетін процедуралар мен функциялар кітапханасы
- •Жаттығулар
- •Жауаптар
- •Типовые алгоритмы формирования групп:
- •Задача "Кодовый замок сейфа"
- •Задачи из "Теории чисел"
- •Геометрические задачи
- •Ключевые термины
- •Краткие итоги
- •Набор для практики
Типовые алгоритмы формирования групп:
Размещения с повторениями:
Программная реализация на Бейсике for i=1 to n for j=1 to n print A(i), A(j); next j, i |
Программная реализация на Паскале for i:=1 to n do for j:=1 to n do writeln (A[i], A[j]); |
Размещения без повторений:
Программная реализация на Бейсике for i=1 to n for j=1 to n if i<>j then print A(i), A(j); next j,i |
Программная реализация на Паскале for i:=1 to n do for j:=1 to n do if i<>j then writeln (A[i], A[j]); |
Сочетания с повторениями:
Программная реализация на Бейсике ... for i=1 to n for j=i to n print A(i,j); next j, i |
Программная реализация на Паскале ... for i:=1 to n do for j:=i to n do writeln (A[i], A[j]); |
Сочетания без повторений:
Программная реализация на Бейсике ... for i=1 to n-1 for j=i+1 to n print A(i), A(j); next j, i |
Программная реализация на Паскале ... for i:=1 to n-1 do for j:=i+1 to n do writeln (A[i], A[j]); |
Задача "Кодовый замок сейфа"
Из 10 букв нужно набрать 3. Повторение букв допустимо. Подсчитать количество возможных комбинаций кодов.
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
dim a$(10)
for i=1 to 10
input "введите букву"; a$(i)
next
for х1=1 to 10
for х2=1 to 10
for х3=1 to 10
print a$(х1); a$(х2); a$(х3);
k=k+1
next x3,x2,x1
print "k="; k
Программа на Паскале:
var a: array [1.10] of char;
x1, x2, x3, k, i: integer;
begin
for i:=1 to 10 do
readln (a[i]);
for х1:=1 to 10 do
for х2:= 1 to 10 do
for х3:=1 to 10 do
begin
writeln (a[х1], a[х2], a[х3]);
k:=k+1;
end;
writeln ('k:=', k);
end.
Тест:
Результат: |
1000 |
Задача
В ассортименте кондитерской сегодня 10 видов пирожных. Каких три пирожных продавец может предложить покупателю?
Идея решения: Необходимо применить типовой алгоритм формирования групп СОЧЕТАНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
dim a$ (10)
for i=1 to 10
input "введите название пирожного"; a$ (i)
next
for х1=1 to 10
for х2=1 to 10
for х3=1 to 10
print a$(х1); a$(х2); a$(х3)
next x3,x2,x1
Программа на Паскале:
var a: array [1.10] of string;
x1, x2, x3, i: integer;
begin
for i:=1 to 10 do
begin
writeln ('введите название пирожного');
readln (a[i]);
end;
for х1:=1 to 10 do
for х2:= 1 to 10 do
for х3:=1 to 10 do
writeln (a[х1], a[х2], a[х3]);
end.
Задачи из "Теории чисел"
Найти все 3-хзначные числа, сумма цифр которых равна К (введенному с клавиатуры)
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
Input "k="; k
for х1=1 to 9
for х2= 0 to 9
for х3=0 to 9
if х1+х2+х3=k then print х1; х2; х3
next x3,x2,x1
Программа на Паскале:
var x1, x2, x3, k: integer;
begin
writeln ('k=');
readln (k);
for х1:=1 to 9 do
for х2:=0 to 9 do
for х3:=0 to 9 do
if х1+х2+х3=k then
writeln (х1, х2, х3);
end.
Тест:
Дано: |
3 |
Результат: |
102 111 120 201 210 300 |
Подсчитать количество 'счастливых' троллейбусных билетов ("счастливые" номера билетов - шестизначные числа, в которых сумма первых трех цифр равна сумме вторых трех цифр).
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике:
for х1=1 to 9
for х2=0 to 9
for х3=0 to 9
for х4=0 to 9
for х5=0 to 9
for х6=0 to 9
if x1+x2+x3=x4+x5+x6 then k=k+1
next x6, x5, x4, x3, x2, x1
print "k="; k
Программа на Паскале:
var x1, x2, x3, k: integer;
begin
k:=0;
for х1:=1 to 9 do
for х2:=0 to 9 do
for х3:=0 to 9 do
for х4:=0 to 9 do
for х5:=0 to 9 do
for х6:=0 to 9 do
if x1+x2+x3=x4+x5+x6 then k:=k+1;
writeln ('k=', k);
end.
Тест:
Результат: |
46242 |
