20.01.2023

N-ая декартова степень множества элементов, заданного массивом (Cartesian). PascalABC.NET

Применим функцию Cartesian к решению задачи на комбинаторику.

Перевод Cartesian (англ.) декартовский.

Задача. Настя составляет коды из букв слова НАСТЯ. Код должен состоять из 7 букв, буква Н должна встречаться в нём ровно два раза, буква А – как минимум один раз. Сколько различных кодов может составить Настя? 

Для составления слов длины 7 Настя использует 5 различных букв. Количество таких слов будет равно:

5*5*5*5*5*5*5 = 57

Для вычисления такого произведения в PascalABC.NET используется функция Cartesian.

Зададим символьный массив c:

c:=Arr('Н','А','С','Т','Я')

Вычислим 7-ю декартову степень множества элементов, заданного массивом с:

c.Cartesian(7)

Циклом foreach x in c.Cartesian(7) do получим все символьные последовательности в виде массивов x. Склеим символы массива x  в строку s:=x.JoinToString.

Выполним проверку условий и подсчитаем количество искомых слов.

Программа решения задачи на языке Паскаль

var c,x:array of char;  

    s:string;

    k:integer;

begin

  c:=Arr('Н','А','С','Т','Я');

  k:=0;

  foreach x in c.Cartesian(7) do

  begin

    s:=x.JoinToString;

    if (s.CountOf('Н')=2) and (s.CountOf('А')>=1) then k+=1;

  end;

  print(k);

end.

Ответ: 16401 

Демонстрация работы функции Cartesian

var c,x:array of char;  

    s:string;

begin

  c:=Arr('Т','О','К');

  foreach x in c.Cartesian(4) do

  begin

    s:=x.JoinToString;

    print(s,',');

  end;

end.

Вывод:

ТТТТ , ТТТО , ТТТК , ТТОТ , ТТОО , ТТОК , ТТКТ , ТТКО , ТТКК , ТОТТ , ТОТО , ТОТК , ТООТ , ТООО , ТООК , ТОКТ , ТОКО , ТОКК , ТКТТ , ТКТО , ТКТК , ТКОТ , ТКОО , ТКОК , ТККТ , ТККО , ТККК , ОТТТ , ОТТО , ОТТК , ОТОТ , ОТОО , ОТОК , ОТКТ , ОТКО , ОТКК , ООТТ , ООТО , ООТК , ОООТ , ОООО , ОООК , ООКТ , ООКО , ООКК , ОКТТ , ОКТО , ОКТК , ОКОТ , ОКОО , ОКОК , ОККТ , ОККО , ОККК , КТТТ , КТТО , КТТК , КТОТ , КТОО , КТОК , КТКТ , КТКО , КТКК , КОТТ , КОТО , КОТК , КООТ , КООО , КООК , КОКТ , КОКО , КОКК , ККТТ , ККТО , ККТК , ККОТ , ККОО , ККОК , КККТ , КККО , КККК 

Всего таких слов: 34 = 81