1

Тема: Програма Паскаль калькулятор

Задано ціле число m. Вставити між деякими цифрами 1, 2, 3, 4, 5, 6, 7, 8, 9, які записані саме в такому порядку, знаки «+» и «-» так, щоб значення отриманого виразу було число m. Наприклад, якщо m=122, то підходить вираз: 12+34-5-6+78+9. Якщо розставити знаки в такий спосіб неможливо, то повідомте про це (вивести в текстовий файл повідомлення «неможливо»).

У вхідному файлі Input.txt записане ціле число m (-10000<m<10000)
В вихідному файлі Output.txt записують отриманий вираз (в наведеному прикладі він: 12+34-5-6+78+9), або «неможливо».


буду вдячний за допомогу!!!!

2

Re: Програма Паскаль калькулятор

Ви щось уже пробували робити? На чому спіткнулися?

3

Re: Програма Паскаль калькулятор

У мене виникає питання по реалізації  циклу  , тобто як  саме групувати цифри  щоб отримати результат,
я думаю треба зєднувати цифри в числа  а потім  оператором case перебирати варіанти + чи -  поки не вийде сума , але послідовність мені поки що в голову не приходить ...

4

Re: Програма Паскаль калькулятор

А от варіант.

Припустимо, дано число m. Визначаємо суму усіх цифр 1...9 (випадок 1: всі знаки - плюси, щоцифри) і порівнюємо з m. Якщо сума цифр менша від m, то явно десь варто замінити плюс на ніщо, збільшуючи, таким чином, загальну суму на 10N, де N - цифра, після якої стояв раніше плюс. Нарощення здійснювати для кожного вільного найбільшого N, який ще не "спарився", аж поки сума усіх доданків не перевищить m. Далі варто рухати суму у бік m, себто зменшувати: розставляти мінуси...

Не знаю, чи ідея взагалі адекватна, але так у мене в голові намалювалося.

5

Re: Програма Паскаль калькулятор

Ось розвязок   

program kjj;
    var t:array[2..9] of string;
          i,m:integer;
  procedure sign_choice4(s,r : longint; op : char; n : integer);
  var newr:longint;
  begin
    if op = '+'  then newr := r+s  else newr := r-s;
    if n <= 9  then begin
       t[n] := '+'; sign_choice4(n,newr,'+',n+1);
       t[n] := '-'; sign_choice4(n,newr,'-',n+1);
       t[n] := ''; sign_choice4(s*10+n,r,op,n+1);
    end
    else
        if newr=m  then begin
          for i := 2  to 9  do write(i-1,t[i]);
          writeln('9');
        end;
  end;
  begin
   readln(m);
   sign_choice4(1,0,'+',2);
  end.