Повторите строку в фигурных скобках n раз - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть входная строка в форме "(x5 (y8) 2) 4"

Скажем, x и y - отдельные функции, я либо хочу вызвать их n раз, либо развернуть скобки для создания новой строки, которую я могу использовать для вызова функций.

Пример 1: Ввод: (x5 (y8) 2) 4 Вывод: x5y8y8x5y8y8x5y8y8x5y8y8

Пример 2 (более сложный):

Входные данные: (((x1) 3x2) 4y5) 2z5 Выходные данные: x1x1x1x2x1x1x1x2x1x1x1x2x1x1x1x2y5x1x1x1x2x1x1x1x1x2x1x1x2x1x1x1 * 100 * * * * * * 100 *

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете разобрать дерево в древовидную структуру данных. Каждый узел в дереве имеет несколько дочерних узлов. Узел может быть либо листом (который является узлом без дочерних элементов), например, переменной x5, либо узлом (с дочерними узлами), который представляет «математическую» функцию.

Дерево из вашего первого примера может выглядеть следующим образом.

Root [NODE]: child_of_root * 4

Child_of_ Root [УЗЕЛ]: 1_child_of_child_of_root + 2_child_of_child_of_root

1_Child_of_Child_of_ Root [LEAF]: x5

2_Child_of_Child_of_ Root [NODE]: child_of_2_child_of_child_of_root * 2

Child_of_2_Child_of_Child_of_ Root [LEAF]: y8

Для анализа вашей входной строки в древовидная структура, которую вы должны проанализировать, как задаются ( и ) и если вы «умножаете» их на коэффициент, а если вы добавляете другие вещи - (x5 "+" (y8) "*" 2). Это может быть довольно сложно. (Может быть, вы могли бы использовать стеки? Однако я уверен, что там есть учебники).

После того, как вы создали свое древовидное представление ввода, вычислить выходную строку относительно просто. Создайте рекурсивный алгоритм, подобный следующему:

String getReult() {
    if(this == NODE) {
        return calculate(MY_NODE_CHILDREN.getResult());
    }else if(this == LEAF) {
        return VARIABLE;
    }
}

Это псевдокод!

Функция вычисления должна добавить результаты дочерней строки, умножить их на коэффициент или ничего не делать, в зависимости от контекста.

Если вы вызываете свою рекурсивную функцию в root, должен появиться правильный результат.

...