Подскажите, пожалуйста

Тема в разделе "Свободное общение", создана пользователем EmiteR, 8 авг 2006.

Статус темы:
Закрыта.
  1. EmiteR

    EmiteR Гость

    Привет всем. Неделю мучаюсь над задачкой, не знаю как правильно сделать. :) В общем, условие такое:
    "Цифры от 0 до 9 размещены в некотором определенном порядке. Розставить между ними арифметические знаки таким образом, чтоб получить заданный результат".

    Пытался делать "влоб", но понял, что 4 в 11-й степени уравнений писать в тексте программы не имеет никакого смысла... :) Или, что еще тупее, прописывать для каждого числа в пределах от -403200 до 403200 (максимальное число, которое можно получить при сочетании заданных цифр) уровнение...

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

    Скажите, пожалуйста, на правильном ли я пути? И, если не сложно, обьясните, как записать цикл, в котором, к примеру, минус будет сменятся на плюс?
    Заранее благодарен!
     
  2. EmiteR

    EmiteR Гость

    Что, никто не знает?.. :( Пожадуйста, помогите!.. Мне во вторник надо уже показывать!.. А сегодня уже, считай, воскресенье... :)
     
  3. talico

    talico Гость

    так, я что-то не поняла в чем проблема, судя по условию последовательность цифр уже задана и есть число, которое необходимо получить, тогда задача сводится просто к расстановке 4-х знаков арифметических (только арифметических?) действий
     
  4. Gisma

    Gisma Гость

    Ты, видимо, хочешь получить алгоритм полного перебора.
    В твоем варианте, знаки операций придется хранить в массиве из 11 элементов, где 0 будет соотв. "-", 1 - "+", 2 - "/", 3 - "*". Тем самым мы получаем число в 4-системе счисления, по которому мы можем произвести операцию расчета результат.
    Общая логика программы каждый раз увеличиваем наше число +1 (это один цикл), до тех пор пока в 0 элемент массива не станет равен 1, это будет означать что все варианты арифметических операций просчитаны. Ессно тебе при сложении придется выравнивать символы за выходы из диапазона (вложенный цикл).
    Вроде все.
     
  5. EmiteR

    EmiteR Гость

    Да, алгоритм перебора. Я вот тут попробовал что-то сделать, пообщался со знакомым програмистом, он мне набросал отрывки программы. По его советам составил прогу, но чего-то она не работает... Если не сложно, помогите, подправьте что-то, а то я в языке новичек, очень плохо ориентируюсь, а времени остается все меньше и меньше... \и так надо бы сегодня до 18:00 (киевское время) сдать...
    Вот исходник

    #define plus 0
    #define minus 1
    #define umnoj 2
    #define delit 3
    #include <stdio.h>

    void main ()

    {int vec[10], i, j, number, xx;
    sign vec[9]=enum (plus, minus, umnoj, delit);

    printf ("vvedite chislo: ");
    scanf ('%d', &xx);
    while (i<262145);
    {sign=enum(plus, minus, umnoj, delit);
    sign xx[9]
    f(xx);
    for (i=8; i>=0; i--)
    {if (xx==delit)
    xx=plus
    else (xx++);break;
    }
    calculate (xx, number);
    {i=0; j=0;
    for (i);
    {switch (xx)
    case plus : a+b;break;
    case minus : a-b;break;
    case umnoj : a*b;break;
    case delit : a/b;break;
    sum=sum+number[i+j];
    }
    a=calculate (xx, number);
    }
    }
    printf ("%d", &a);
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей