Создание общих задач умножения в Python

У меня есть структура, содержащая объявление вроде этого:

Нет, вы этого не делаете. Это синтаксическая ошибка. Вы ищете:

void (*functions[256])();

Что такое массив указателей на функции. Обратите внимание, однако, что void func() не является «функцией, которая не принимает аргументов и ничего не возвращает». Это функция, которая принимает неопределенные числа или типы аргументов и ничего не возвращает. Если вам нужны «никакие аргументы», вам это нужно:

void (*functions[256])(void);

В C ++ void func() означает, что означает «не принимает аргументов», что вызывает некоторую путаницу (тем более, что функциональность C указывает, что для void func() имеет сомнительное значение.)

В любом случае вы должны typedef указатель на функцию. Это сделает код бесконечно легче понять, и у вас будет только один шанс (в typedef), чтобы получить синтаксис неправильно:

typedef void (*func_type)(void);
// ...
func_type functions[256];

В любом случае вы не можете назначить массив, но вы можете инициализировать массив и скопировать данные:

static func_type functions[256] = { /* initializer */ };
memcpy(struct.functions, functions, sizeof(functions));
0
задан JonNelson 13 July 2018 в 05:29
поделиться

1 ответ

Использовать рекурсию. Обратите внимание, что параметр n означает уровень глубины, и поскольку в атомной группе ( o * o ) есть две переменные, n должно быть на 2 меньше числа переменных, которые вы хотите получить комбинациями групп умножения.

a = '( o * o )'
def g(n):
    if n == 0:
        return {a}
    r = set()
    for b in g(n - 1):
        for i in range(len(b)):
            if b[i] == 'o':
                r.add(b[:i] + a + b[i + 1:])
    return r
for n in range(5):
    print(g(n))

Эти выходы:

{'( o * o )'}
{'( ( o * o ) * o )', '( o * ( o * o ) )'}
{'( ( ( o * o ) * o ) * o )', '( ( o * o ) * ( o * o ) )', '( o * ( o * ( o * o ) ) )', '( o * ( ( o * o ) * o ) )', '( ( o * ( o * o ) ) * o )'}
{'( ( ( o * o ) * ( o * o ) ) * o )', '( ( o * o ) * ( ( o * o ) * o ) )', '( o * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * ( o * o ) ) * o ) * o )', '( ( o * o ) * ( o * ( o * o ) ) )', '( ( o * ( o * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * o )', '( ( ( o * o ) * o ) * ( o * o ) )', '( o * ( ( o * o ) * ( o * o ) ) )', '( ( o * ( ( o * o ) * o ) ) * o )', '( ( ( ( o * o ) * o ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * o ) )', '( o * ( ( o * ( o * o ) ) * o ) )'}
{'( o * ( ( ( o * o ) * ( o * o ) ) * o ) )', '( ( ( o * ( o * o ) ) * ( o * o ) ) * o )', '( ( o * o ) * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * o ) * o ) * ( o * ( o * o ) ) )', '( ( ( o * o ) * o ) * ( ( o * o ) * o ) )', '( ( ( o * ( o * o ) ) * o ) * ( o * o ) )', '( o * ( ( ( ( o * o ) * o ) * o ) * o ) )', '( o * ( o * ( o * ( ( o * o ) * o ) ) ) )', '( ( o * o ) * ( ( o * o ) * ( o * o ) ) )', '( ( o * o ) * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * o ) ) * ( ( o * o ) * o ) )', '( ( ( ( o * o ) * o ) * ( o * o ) ) * o )', '( ( o * ( ( o * ( o * o ) ) * o ) ) * o )', '( ( ( o * ( ( o * o ) * o ) ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * ( o * o ) ) )', '( ( ( ( ( o * o ) * o ) * o ) * o ) * o )', '( o * ( ( o * ( o * ( o * o ) ) ) * o ) )', '( ( ( o * o ) * ( o * o ) ) * ( o * o ) )', '( o * ( ( ( o * ( o * o ) ) * o ) * o ) )', '( o * ( o * ( o * ( o * ( o * o ) ) ) ) )', '( ( ( o * ( o * ( o * o ) ) ) * o ) * o )', '( ( o * ( o * o ) ) * ( o * ( o * o ) ) )', '( ( ( ( o * o ) * ( o * o ) ) * o ) * o )', '( ( ( o * o ) * ( o * ( o * o ) ) ) * o )', '( ( o * ( o * ( ( o * o ) * o ) ) ) * o )', '( ( o * ( ( ( o * o ) * o ) * o ) ) * o )', '( ( ( o * o ) * ( ( o * o ) * o ) ) * o )', '( ( o * o ) * ( ( o * ( o * o ) ) * o ) )', '( ( o * ( ( o * o ) * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * ( o * o ) ) ) )', '( ( o * ( ( o * o ) * ( o * o ) ) ) * o )', '( o * ( o * ( ( o * ( o * o ) ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * ( o * o ) )', '( ( o * o ) * ( ( ( o * o ) * o ) * o ) )', '( o * ( o * ( ( ( o * o ) * o ) * o ) ) )', '( o * ( ( o * ( o * o ) ) * ( o * o ) ) )', '( o * ( ( o * o ) * ( ( o * o ) * o ) ) )', '( o * ( ( o * o ) * ( o * ( o * o ) ) ) )', '( ( o * ( o * ( o * ( o * o ) ) ) ) * o )', '( o * ( ( o * ( ( o * o ) * o ) ) * o ) )', '( ( ( ( o * ( o * o ) ) * o ) * o ) * o )', '( ( ( ( o * o ) * o ) * o ) * ( o * o ) )'}
1
ответ дан blhsing 17 August 2018 в 13:39
поделиться
  • 1
    Немного возиться, и это отлично работает, большое спасибо. – JonNelson 13 July 2018 в 06:21
Другие вопросы по тегам:

Похожие вопросы: