codeFlowType:
codeWrite
codeFlowLang:
Java
Оля составляет слова перестановкой букв слова СПОРТЛОТО, оставляя только слова с двумя буквами Т рядом. Сколько различных слов может составить Оля?
Конечно! Ниже представлен пример кода на 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;
}
}
Объяснение решения:
Если нужно, я могу дополнительно пояснить логику или подготовить более оптимизированный код!