Как написать код для ребуса: ДВА * ДВА = ЧЕТЫРЕ(1 решение)?
|
|
Пятница, 28 Августа 2020 г. 11:27
+ в цитатник
xande.R: Подскажите пожалуйста как написать код решения ребуса ДВА * ДВА = ЧЕТЫРЕ(1 решение)?
Решение смог найти, у меня получилось так: 459 * 459 = 210681
Я никогда не понимал ребусы, и кое как смог решить этот, но как написать код тут не особо пойму.
Есть теория:
Математический ребус – логическая задача, где в арифметическом примере цифры заменены буквами (одинаковым цифрам соответствуют одинаковые буквы, разным – разные). Например, 123+456=579 можно закодировать как сом + лук = уха.
Решить математический ребус означает найти числа, которые были закодированы. Один из способов решения – перебор возможных значений для букв. Но полный перебор занимает много времени за счёт большого числа вложенных циклов, поэтому следует отсекать заведомо неподходящие значения. Например, очевидно, что с/=9, с/=,0, у/=,0, л/=9, л/=0. Таким образом, числа, закодированные словами «сом» и «лук» меняются от 100 до 800, а число, закодированное словом «уха» - от 200 до 999.
Числа нарезаются на цифры, которые помещаются в множество. Если мощность множества не равна 3 (цифры разные!), то число не подходит в качестве решения задачи и надо проверять следующее число.
И пример:
set M;
set N;
for(int i=10000; i < 44000; i++)
{
if(i % 5 != 0)
{
M = Set_From_Number(i);
if (M.size() == 5) {
for (int j = 200; j < 1000; j++) {
int t1 = j / 100;
int t2 = (j / 10) % 10;
if (t1%2 == 0 && i % 10 == t2) {
N = Set_From_Number(j);
if (N.size() == 3 && i * 2 == j * 100 + 10 * t2 + t1)
cout << i << " + " << i << " = " << i * 2 << endl;
}
}
}
}
}
https://forum.sources.ru/index.php?showtopic=419491&view=findpost&p=3837832
Метки:
C/C++:
Общие вопросы
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-