Оля составляет слова перестановкой букв слова

Оля составляет слова перестановкой букв слова СПОРТЛОТО, оставляя только слова с двумя буквами Т рядом. Сколько различных слов может составить Оля?
Дополнительные параметры: codeFlowType: codeWrite codeFlowLang: Java
Создано: 09.06.2025 06:21

Оля составляет слова перестановкой букв слова СПОРТЛОТО, оставляя только слова с двумя буквами Т рядом. Сколько различных слов может составить Оля?

Конечно! Ниже представлен пример кода на Java, который решает задачу: считает количество различных слов, которые можно составить перестановкой букв слова "СПОРТЛОТО", где две буквы "Т" идут рядом.

import java.util.HashMap;
import java.util.Map;

public class PermutationWithTwoTT {
    public static void main(String[] args) {
        String word = "СПОРТЛОТО";

        // Подсчет количества каждой буквы
        Map<Character, Integer> counts = new HashMap<>();
        for (char c : word.toCharArray()) {
            counts.put(c, counts.getOrDefault(c, 0) + 1);
        }

        // Проверка, есть ли две буквы 'Т'
        int countT = counts.getOrDefault('Т', 0);
        if (countT < 2) {
            System.out.println("Недостаточно букв 'Т' для выполнения условия.");
            return;
        }

        // Удаляем две 'Т' из исходных подсчетов
        counts.put('Т', countT - 2);

        // Если после удаления 'Т' в каком-либо символе осталось 0, удаляем его
        counts.entrySet().removeIf(entry -> entry.getValue() == 0);

        // Функция для подсчета количества перестановок с учетом повторяющихся элементов
        long totalPermutations = factorial(word.length() - 2); // минус две 'Т', которые объединены
        for (int count : counts.values()) {
            totalPermutations /= factorial(count);
        }

        // Учитываем, что эти две 'Т' идут вместе как единый блок
        // Замена двух 'Т' на один блок увеличивает число элементов на 1
        int totalLetters = word.length() - 2; // исходных - 2 'Т'
        int lengthWithBlock = totalLetters + 1; // вместо двух 'Т' - один блок

        // Теперь считаем число вариантов расположения блока и остальных букв
        long result = factorial(lengthWithBlock);

        // Умножаем на число перестановок внутри блока (только одна перестановка - блок ТТ)
        // Поэтому внутри блока 'ТТ' только одна возможность, учет не нужен

        System.out.println("Количество различных слов с двумя 'Т' рядом: " + result);
    }

    // Функция для вычисления факториала
    public static long factorial(int n) {
        long result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        }
        return result;
    }
}

Объяснение решения:

  1. Посчитайте все буквы слова "СПОРТЛОТО".
  2. Обеспечьте наличие как минимум двух букв 'Т'.
  3. Удалите две 'Т' из исходных подсчетов, заменив их на один блок 'ТТ'.
  4. Вычислите число вариантов размещения этого блока и остальных букв.
  5. Результат — число всех возможных перестановок, где две 'Т' идут вместе.

Если нужно, я могу дополнительно пояснить логику или подготовить более оптимизированный код!