@iayjull

Как решить задачу на c?

int main()
{
    int x, i;
    scanf("%d", &x);
    int a[0]*x;
    for (i = 1; i = x; i++)
        if i+1<=x: a[i+1]+=a[i];
        if i*2<=x: a[i*2]+=a[i];
        if i*3<=x: a[i*3]+=a[i];
    printf("%d\n", a[x]);
}


6480670be9ffd432243029.png

решала такие задачи на питоне, но не знаю, как правильно перенести на синтаксис с
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Ну если выше ваша попытка перенести на си, то:
if i+1<=x:

это так не работает, условие должно быть в круглых скобках (if это оператор), двоеточие не нужно:
if (i+1<=x)

int a[0]*x;


Вот это я вообще не понял и 99% что это не будет работать. Просто почитайте в гугле как в си инициализировать массив переменной длины.

И да - в тегах c++, в вопросе c - вы определитесь

P.S. Логику не проверял вообще, чисто синтаксис. Кстати в цикле тоже ошибка - и тоже просто советую загуглить цикл for
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Задача похожа на knapsack problem. Ее можно переформулировать как укладка вещей в рюкзаке с полным заполнением и с сохранением порядка вещей. Или еще как поиск всех сумм целых чисел 1,2,3 равных в сумме n.

Если представить тернарное дерево где childs - это соотвественно длины прыжков (веса) - тогда задача сводится к генерации всех возможных путей в тернарном дереве где длина пути равна n. У этого дерева будет много лишних ветвей которые можно сразу отбросить на этапе обхода если частичная сумма уже больше чем n.

Вобщем DFS.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы