Я попытался решить проблему, описанную ниже, для вызова кода, но не смог завершить ее за 1 час. У меня есть идея о том, как работает алгоритм, но я не совсем уверен, как его лучше всего реализовать. У меня есть код и проблема ниже.
Первые 12 цифр pi - 314159265358. Мы можем сделать эти цифры в выражении, оценивающем 27182 (первые 5 цифр e) следующим образом:
3141 * 5 / 9 * 26 / 5 * 3 - 5 * 8 = 27182
или
3 + 1 - 415 * 92 + 65358 = 27182
Обратите внимание, что порядок ввода цифр не изменяется. Операторы (+, -,/, или *) просто вставляются для создания выражения.
Напишите функцию, чтобы взять список чисел и цель, и верните все способы, с помощью которых эти числа могут быть сформированы в выражения, оценивающие целевой объект
Например:
f ( "314159265358", 27182) должен печатать:3 + 1 - 415 * 92 + 65358 = 27182 3 * 1 + 4 * 159 + 26535 + 8 = 27182 3 / 1 + 4 * 159 + 26535 + 8 = 27182 3 * 14 * 15 + 9 + 26535 + 8 = 27182 3141 * 5 / 9 * 26 / 5 * 3 - 5 * 8 = 27182
Эта проблема сложна, так как вы можете иметь любую комбинацию чисел, и вы не учитываете одно число за раз. Я не был уверен, как сделать комбинации и рекурсию для этого шага. Обратите внимание, что круглые скобки не предусмотрены в решении, однако порядок операций сохраняется.
Моя цель - начать с say
{"3"}
then
{"31", "3+1", "3-1", "3*1" "3/1"}
then
{"314", "31+4", "3+1+4", "3-1-4", "31/4", "31*4", "31-4"} etc.
а затем просмотрите каждое значение в списке каждый раз и посмотрите, является ли оно целевым. Если это так, добавьте эту строку в список результатов.
Вот мой код
public static List<String> combinations(String nums, int target)
{
List<String> tempResultList = new ArrayList<String>();
List<String> realResultList = new ArrayList<String>();
String originalNum = Character.toString(nums.charAt(0));
for (int i = 0; i < nums.length(); i++)
{
if (i > 0)
{
originalNum += nums.charAt(i); //start off with a new number to decompose
}
tempResultList.add(originalNum);
char[] originalNumCharArray = originalNum.toCharArray();
for (int j = 0; j < originalNumCharArray.length; j++)
{
//go through every character to find the combinations?
// maybe recursion here instead of iterative would be easier...
}
for (String s : tempResultList)
{
//try to evaluate
int temp = 0;
if (s.contains("*") || s.contains("/") || s.contains("+") || s.contains("-"))
{
//evaluate expression
} else {
//just a number
}
if (temp == target)
{
realResultList.add(s);
}
}
tempResultList.clear();
}
return realResultList;
}
Может ли кто-нибудь помочь в решении этой проблемы? Ищете ответ с кодировкой в нем, так как мне нужна помощь в генерации возможностей