Все шестибуквенные слова, составленные из букв M, A, Н, Г, У, C, T, записаны в алфавитном порядке и пронумерованы.
Вот начало начало списка:
1. AAAAAA
2. AAAAAГ
3. AAAAAM
4. AAAAAH
5. AAAAAC
6. AAAAAT
7. АААААУ
...
Под каким номером в списке стоит последнее слово, которое не начинается с
Приведём аналитическое решение Александра Козлова.
Переписываем слово МАНГУСТ в алфавитном порядке – АГМНСТУ и кодируем каждую букву соответствующей цифрой по порядку – 0123456. Переформулируем условие для семеричной системы счисления - найти последнее слово (максимальное число), начинающееся с пятерки и содержащее только две двойки и одну или не одной единицы. Получаем два значения «566221» и «566622». Максимальным будет код 566622, с учетом того что номер строки на единицу больше его семеричного кода не забудем после его перевода в десятичное число добавить единицу.
Остается вычислить выражение: ( 5 · 75 + 6 · 74 +6 · 73 +6 · 72 + 2 · 71 +2 · 70)+1.
Приведем код на Python:
print(5*7**5 + 6*7**4 + 6*7**3 + 6*7**2 + 2*7**1 + 2*7**0 + 1)
или:
print(int(str(566622),7)+1)
или:
print(int('566622',7)+1)
Приведём решение на языке Python.
from itertools import product
count = 0
m=[]
for p in product(sorted("МАНГУСТ"), repeat=6):
count+=1
if p.count("М") == 2 and p[0]!="У" and p.count("Г") <=1:
m.append(count)
print(max(m))
Ответ: 100810.
Приведём другое решение на языке Python.
a = {0: "А", 1: "Г", 2: "М", 3: "Н", 4: "С", 5: "Т", 6: "У"}
k = 0
maxi=[]
for i in range(0, len(a)):
for j in range(0, len(a)):
for g in range(0, len(a)):
for m in range(0, len(a)):
for n in range(0, len(a)):
for t in range(0, len(a)):
s = a[i] + a[j] + a[g] + a[m] + a[n] + a[t]
k += 1
if a[i] != 'У' and s.count('М') == 2 and s.count('Г') < 1:
maxi.append(k)
print(max(maxi))
Приведём решение Александра Козлова на языке Python.
def five(x):
s = ''
while x:
s = str(x%7) + s
x = x//7
return s
for i in range(int('666666',7),int('500000',7),-1):
s = five(i-1)
if s[0]!= '6' and s.count('2') == 2 and s.count('1') <= 1:
print(i)
break
Приведём программу Сергея Донец на PascalABC:
begin
'МАНГУСТ'.Sorted.JoinToString // АГМНСТУ в алфавитном порядке
.Cartesian(6).Numerate // нумерация
.Where(t->not t[1].isMatch('^У')) // не начинается с буквы У
.Where(t->t[1].Matches('М').count=2) // Ровно две буквы М
.Where(t->t[1].Matches('Г').count<=1) // Не более одной буквы Г (0 или 1)
.Last // последнее
.item1.print; // 100810
end.

