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

  • Автор темы EmiteR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

EmiteR

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

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

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

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

EmiteR

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

talico

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

Gisma

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

EmiteR

Гость
#5
Да, алгоритм перебора. Я вот тут попробовал что-то сделать, пообщался со знакомым програмистом, он мне набросал отрывки программы. По его советам составил прогу, но чего-то она не работает... Если не сложно, помогите, подправьте что-то, а то я в языке новичек, очень плохо ориентируюсь, а времени остается все меньше и меньше... \и так надо бы сегодня до 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);
}
 
Статус
Закрыто для дальнейших ответов.