Подтвердить что ты не робот

Стратегия в отношении того, как подойти к этому алгоритму?

Мне задали этот вопрос в тесте, и мне нужна помощь в отношении того, как я должен подходить к решению, а не к фактическому ответу. Вопрос:

Вам присвоено 7-значное число (с каждой цифрой и 0-9). Число имеет это свойство

произведение первых трех цифр = произведение последних трех цифр = произведение центральных 3 цифр

Определите среднюю цифру.

Теперь я могу сделать это на бумаге грубой силой (проб и ошибок), продукт равен 72, а цифры

8,1,9,2,4,3,6

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

4b9b3361

Ответ 1

Пусть число: a b c d e f g

Итак, согласно правилу (1):

axbxc = cxdxe = exfxg

больше, чем у нас (2):

axb = dxe и cxd = fxg

Этот вопрос можно решить с помощью факторизации и немного хита/испытания. Из цифр от 1 до 9, 5 и 7 могут быть отвергнуты сразу же, поскольку они являются простыми числами и не будут вписываться в вышеупомянутые два уравнения.

Цифры с 1 по 9 могут быть учтены как:

1 = 1, 2 = 2, 3 = 3, 4 = 2X2, 6 = 2X3, 8 = 2X2X2, 9 = 3X3

После факторизации мы теперь остаемся с суммарными 7 - 2, 4 - 3 и числом 1. Что касается правила 2, мы оставляем всего 4 возможности, эти 4 уравнения могут быть вычислены логикой факторизации, так как мы знаем, что у нас в целом 7 2 и 4 3 с нами.

1:1X8 (2x2x2) = 2X4 (2x2)

2: 1X6 (3x2) = 3X2

3: 4 (2x2) X3 = 6 (3x2) X2

4: 9 (3x3) X2 = 6 (3x2) X3

Пропуск 5 и 7 мы оставили 7 цифр. С приведенными выше уравнениями мы имеем 4 цифры с нами и остаемся с остальными 3 цифрами, которые могут быть проверены с помощью хита и испытания. Например, если мы рассмотрим первый случай:

1X8 = 2X4 и остаются с 3,6,9. мы имеем axbxc = cxdxe, мы можем выбрать c с этими 3 вариантами, в этом случае продукты будут 24, 48 и 72.

24 не может быть правильным, поскольку для последних трех цифр мы остаемся с 6,9,4 (= 216)

48 не может быть правильным, поскольку для последних трех цифр мы остаемся с 3,9,4 (= 108)

72 может быть допустимым вариантом, поскольку последние три цифры в этом случае будут 3,6,4 (= 72)

Ответ 2

Этот вопрос можно решить с помощью реляционного программирования. Я думаю, что это очень ясно позволяет программисту увидеть, что происходит и как проблема решена. Хотя это может быть не самый эффективный способ решения проблем, он все равно может принести желаемую ясность и справиться с проблемами до определенного размера. Рассмотрим этот небольшой пример из Oz:

fun {FindDigits}
   D1 = {Digit}
   D2 = {Digit}
   D3 = {Digit}
   D4 = {Digit} 
   D5 = {Digit}
   D6 = {Digit}
   D7 = {Digit}
   L = [D1 D2 D3] M = [D3 D4 D5] E= [D5 D6 D7] TotL in
   TotL = [D1 D2 D3 D4 D5 D6 D7]
   {Unique TotL} = true
   {ProductList L} = {ProductList M} = {ProductList E}
   TotL
end

(Теперь это можно было бы дополнительно параметризовать, но не оптимизировать для иллюстрации точки).

Здесь вы сначала выбираете 7 цифр с функцией Digit/0. Затем вы создаете три списка: L, M и E, состоящие из сегментов, а также возвращаемый общий список (вы также можете вернуть конкатенацию, но я нашел это лучше для иллюстрации).

Затем наступает точка, вы указываете отношения, которые должны быть неповрежденными. Во-первых, TotL уникален (отличается от вашей формулировки задач). Затем следующий, что продукты сегмента должны быть равны.

Что происходит, так это то, что поиск выполняется для ваших ответов. Это стратегия поиска по глубине, но она также может быть первой в ширину, и решатель призван выявить все решения. Стратегия поиска находится внутри функции SolveAll/1.

{Browse {SolveAll FindDigits}}

Что по очереди возвращает этот список ответов:

[[1 8 9 2 4 3 6] [1 8 9 2 4 6 3] [3 6 4 2 9 1 8] 
 [3 6 4 2 9 8 1] [6 3 4 2 9 1 8] [6 3 4 2 9 8 1] 
 [8 1 9 2 4 3 6] [8 1 9 2 4 6 3]]

По крайней мере, этот способ не использует грубую силу. По сути, вы ищете ответы здесь. Может быть эвристика, которая позволит вам найти правильный ответ раньше (возможно, математическая магия), или вы можете использовать генетические алгоритмы для поиска пространства или других хорошо известных стратегий.

Ответ 3

Мой ответ фактически расширяет ответ @Ansh.

Пусть abcdefg - цифры номера. Тогда

ab=de

cd=fg

Из этих соотношений мы можем исключить 0, 5 и 7, потому что нет других множителей этих чисел между 0 и 9. Таким образом, мы оставляем семь чисел, и каждый номер включается один раз в каждом ответе. Мы рассмотрим, как мы можем связать числа (ab, de, cd, fg).

Что происходит с 9? Его нельзя комбинировать с 3 или 6, так как тогда их произведение будет иметь в три раза множитель 3, и мы имеем в сумме 4 факторы 3. Аналогично, 3 и 6 должны объединяться по крайней мере один раз вместе в ответ на два фактора 9. Это дает произведение 18 и поэтому 9 следует объединить хотя бы один раз с 2.

Теперь, если 9x2 находится в углу, то 3x6 должен быть посередине. Значение в другом углу должно быть еще одним множителем 3. Итак, 9 и 2 находятся посередине.

Предположим, что ab=3x6 (другой случай симметричен). Тогда d должен быть 9 или 2. Но если d 9, то f или g должен быть множителем 3. Итак, d - 2, а e - 9. Мы можем остановиться здесь и ответить на средний разряд

2

Теперь мы имеем 2c= fg, а остальные варианты 1, 4, 8. Мы видим, что единственными решениями являются c = 4, f = 1, g = 8 и c = 4, f = 8, g = 1.

Итак, если 3x6 находится в левом углу, мы имеем следующие решения:

3642918, 3642981, 6342918, 6342981

Если 3x6 находится в правом углу, мы имеем следующие решения, которые обращаются выше:

8192463, 1892463, 8192436, 1892436

Ответ 4

Основной коэффициент отдельной цифры (если возможно)

0 = 0
1 = 1
2 = 2
3 = 3
4 = 2 x 2
5 = 5
6 = 2 x 3
7 = 7
8 = 2 x 2 x 2
9 = 3 x 3

Всего: 7 2 + 4 3 + 1 5 + 1 7 's

С тем, что When A=B=C, composition of prime factor of A must be same as composition of prime factor of B and that of C, 0 , 5 and 7 исключены, поскольку они имеют уникальный простой коэффициент, который никогда не может сравниться с фактом.

Следовательно, 7 2 + 4 3 оставлены, и мы имеем 7 цифр (1,2,3,4,6,8,9). Поскольку имеется только 7 цифр, число формируется только этими цифрами.

Напомним, что A, B и C должны иметь тот же состав простых факторов. Отсюда следует, что A, B и C имеют одинаковое число 2 и 3 в своем составе. Итак, мы должны попытаться достичь (всего для A и B и C):

  • 9 ИЛИ 12 2 И
  • 6 3 's

(должно быть произведение 3, нижняя граница - это общее число простого коэффициента всех цифр, верхняя граница - нижняя граница * 2)

Рассмотрим точку 2 (так как она имеет одну возможность), A имеет 2 3 и то же самое для B и C. Чтобы иметь больше общего простого коэффициента в целом, нам нужно поставить цифру в цифре соединения между двумя продуктами (третий или пятая цифра). Извлеките цифры с основным коэффициентом 3 в две группы {3,6} и {9} и поместите цифру в цифру соединения. Единственный возможный способ - поместить 9 в цифру соединения и 3,6 на несвязанный продукт. Значит xx9xx36 или 36xx9xx (порядок 3,6 не важен)

С этим результатом получаем 9 x middle x connection digit = connection digit x 3 x 6. Таким образом, middle = (3 x 6) / 9 = 2

Ответ 5

Вот как вы можете рассмотреть проблему:

Отметим окончательное решение N1 N2 N3 N4 N5 N6 N7 для трех чисел N1N2N3, N3N4N5 и N5N6N7

  • 0, 5 и 7 должны исключаться из-за того, что они простые, а другие шифры не кратно им. Поэтому, если бы они разделили один из трех чисел, ни один другой номер не мог бы поделить других.

  • Итак, мы получаем 7 оставшихся шифров: 1234689 где произведение шифров 2^7*3^4

  • (N1*N2*N3) и (N5*N6*N7) равны, поэтому их произведение является квадратным числом. Затем мы удалим одно из числа (N4) из произведения предыдущей точки, чтобы найти квадратное число (, т.е. Четные показатели на обоих числах)

    • N4 не может быть 1, 3, 4, 6, 9.
    • заключаем, что N4 есть 2 or 8

Если N4 равно 8 и делит (N3*N4*N5), мы не можем использовать оставшиеся четные числа (2, 4, 6) для деления как (N1*N2*N3), так и (N6*N7*N8) на 8. Итак, N4 равно 2, а 8 не принадлежит ко второй группе (поставьте его в N1).

Теперь мы имеем: 1st grp: 8XX, 2nd group: X2X 3rd group: XXX

Примечание: в этот момент мы знаем, что произведение 72, потому что оно 2 ^ 3 * 3 ^ 2 (квадратный корень из 2 ^ 6 * 3 ^ 4), но результат не очень важен. Мы сделали трудную часть, зная 7 чисел и среднее положение.

  1. Тогда мы знаем, что мы должны распространять 2^3 на (N1*N2*N3), (N3*N4*N5), (N5*N6*N7), потому что 2^3*2*2^3=2^7

Мы уже дали 8 to N1, 2 to N4 и поместим положение 6 to N6 и 4 to N5, в результате чего каждое из трех чисел будет кратным 8.

Теперь мы имеем: 1st grp: 8XX, 2nd group: X24 3rd group: 46X

  1. Мы имеем тот же образ мышления с учетом нечетного числа, мы распределяем 3 ^ 2, с каждой стороны, зная, что у нас уже есть 6 в последней группе. Последняя группа затем получит 3. И первая, и вторая 9.

Теперь мы имеем: 1st grp: 8X9, 2nd group: 924 3rd group: 463

И затем 1 at N2, который является оставшейся позицией.

Ответ 6

Эта проблема довольно проста, если вы внимательно посмотрите на номер 72.

У нас есть номер с этой формой abcdefg

и abc = cde = efg, с этими цифрами 8,1,9,2,4,3,6

  • Итак, во-первых, мы можем заключить, что 8,1,9 должно быть одним из трех, потому что нет способа 1 перейти с другими двумя числами к 72.

  • Можно также заключить, что 1 должно быть в start/end of the whole number or middle тройки.

Итак, теперь мы имеем 819defg или 918defg...

Используя некоторые вычисления с остальными этими цифрами, мы можем видеть, что возможно только 819defg, потому что нам нужно 72/9 = 8, поэтому действует только 2,4, тогда как мы не можем создать 72/8 = 9 из этих 2,4,3,6 цифр, поэтому → 81924fg или 81942fg, а 819 - тройка, которая начинает или end наш номер.

Итак, остальная часть работы проста, нам нужно либо 72/4 = 18, либо 72/2 = 36, теперь мы можем получить ответы: 8192436 или 8192463.

Ответ 7

7 цифр: 8,1,9,2,4,3,6

say X x Y x Z= 72

1) выберите любые два из семи цифр. скажем, X, Y

2) разделим 72 на X, а затем Y.. вы получите третье число i.e Z.

мы нашли XYZ набор из 3 цифр, который дает результат 72.

теперь повторите 1) и 2) с оставшимися 4 цифрами.

на этот раз мы обнаружили ABC, который умножается на 72.

позволяет сказать, что 7-я цифра не указана I.

3) разделите 72 на I. результат R

4) разделите R на один из XYZ. проверьте, есть ли результат в ABC.

если нет, повторите шаг 3)

если да, найдите третью пару (предположим, что вы разделили R на Y, а результат - на B)

YIB - это третья пара.

поэтому... решение будет.

XZYIBAC

Ответ 8

У вас есть 7 чисел - вместо того, чтобы смотреть на него в группах по 3, разделите число как таковое:

AB | C | D | E | FG

Получите значение AB и используйте его для получения значения C следующим образом: C = ABC/AB

Затем вы хотите сделать то же самое с двумя 2 цифрами, чтобы найти E, используя FG. E = EFG/FG

Теперь, когда у вас есть C и E, вы можете решить для D

Так как CDE = ABC, тогда D = ABC/CE

Помните свои формулы - вместо того, чтобы смотреть на цифры, создайте формулу, аналогичную алгоритму, который, как вы знаете, будет работать каждый раз.

ABC = CDE = EFG Однако вы должны помнить, что ваши знаки = должны балансировать. Вы можете видеть, что D = ABC/CE = EFG/CE. Как только вы это знаете, вы можете выяснить, что вам нужно, чтобы решить проблему.

Сделал быстрый пример в скрипте кода: http://jsfiddle.net/4ykxx9ve/1/

var findMidNum = function() {
    var num = [8, 1, 9, 2, 4, 3, 6];

    var ab = num[0] * num[1];
    var fg = num[5] * num[6];
    var abc = num[0] * num[1] * num[2];
    var cde = num[2] * num[3] * num[4];
    var efg = num[4] * num[5] * num[6];
    var c = abc/ab;
    var e = efg/fg;
    var ce = c * e
    var d = abc/ce;

    console.log(d); //2
}();

Ответ 9

Вам присвоено 7-значное число (с каждой цифрой и 0-9). Число имеет это свойство

произведение первых трех цифр = произведение последних трех цифр = произведение центральных 3-х цифр Определите среднюю цифру.

Теперь я могу сделать это на бумаге грубой силой (проб и ошибок), продукт равен 72, а цифры

8,1,9,2,4,3,6 Теперь, как я могу подойти к проблеме не с помощью грубой силы?

использовать функции linq и подстроки

example var item = array.Skip(3).Выберите (3) таким образом, чтобы у вас был цикл

for(f =0;f<charlen.length;f++){
var xItemSum = charlen[f].Skip(f).Take(f).Sum(f => f.Value);
}

//непроверенный код