IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Записать выражение.
reill
сообщение 16.04.2003 10:19
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 52

Репутация: -  0  +


Записать выражение :
1 операция 2 операция 3 операция 4 операция 5 операция 6 операция 7 операция 8 операция 9 операция =100, т.е. цифры, от 1 до 9 соединить арифметическими операциями +,-,*,/ так, чтобы результат получился равным 100.Есть восемь вариантов такой записи, например, 1*2+3*4*5-6+7+8-9=100.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
reill
сообщение 19.04.2003 11:37
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 52

Репутация: -  0  +


Ну чего не у кого идей нет???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 20.04.2003 16:46
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


не решил ещё?
с чего ты взял что 8 вариантов решения?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GLuk
сообщение 20.04.2003 16:50
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


см. сабж "Генерация 9-значных чисел" примерно та же телега...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 20.04.2003 17:09
Сообщение #5


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


может, brute-force'ом? То бишь, взять эти числа и переставлять му ними операторы пока не получим 100. Только как долго это будет работать и какую ты за это получишь оценку  :-[ sad.gif А к какому дню надо сделать?


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 20.04.2003 19:12
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


есть решение
вот оно:
+++++++*
++-*+*+*
+-*+*++*
+-*-+*+*
+*+++++*
+*-*+*+*
+**+++*+
+**++-+*
-+**+*+-
-+**-+*-
**+++++*
**-*+*+*
***+++*+

13 комбинаций
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 20.04.2003 19:34
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


сори
вот эти 15 комбинаций

+++++++*
++-*+*+*
+-*+*++*
+-*-+*+*
+*+*-++*
+***/++*
-+**+*+-
-+**-+*-
-*+*+++*
-*-+*++*
-*--+*+*
**+++++*
**-*+*+*
***+++*+
***++-+*
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 20.04.2003 19:55
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


а вот и сам код:

Код
program ForForum;
{$APPTYPE CONSOLE}
uses
SysUtils;

procedure WriteAllCombinations;
const
IndStr = '+-*/';
var
a, b, c, d, e, f, g, h: Byte;
S: String;

function Calc(S: String): Real;
var
i: Byte;
Res, PromRes: Real;
F, Fl: Boolean;
begin

Res := 0;
i := 1;
repeat
 F := False;
 Fl := False;
 while S[i] in ['*', '/'] do begin
  Fl := True;
  case S[i] of
   '*': if not F then begin
         PromRes := (Sqr(i) + i);
         if i > 1 then begin
          if S[i - 1] = '-' then PromRes := -1 * PromRes;
          S[i - 1] := ' ';
         end;
        end else PromRes := PromRes * (i + 1);
   '/': if not F then begin
         PromRes := i / (i + 1);
         if i > 1 then begin
          if S[i - 1] = '-' then PromRes := -1 * PromRes;
          S[i - 1] := ' ';
         end;
       end else PromRes := PromRes / (i + 1);
  end;
  Inc(i);
  F := True;
 end;
 Inc(i);
 if Fl then Res := Res + PromRes;
until i > 8;

for i := 1 to 8 do
case S[i] of
 '+': if i = 1 then begin
       Res := Res + 3;
      end else begin Res := Res + i + 1; end;
 '-': if i = 1 then begin
       Res := Res - 1;
      end else Res := Res - i - 1;
end;

if S[1] = ' ' then Result := Res + 1 else Result := Res

end;

begin

S := '12345678';
for a := 1 to 4 do begin
S[1] := IndStr[a];
for b := 1 to 4 do begin
S[2] := IndStr[b];
for c := 1 to 4 do begin
S[3] := IndStr[c];
for d := 1 to 4 do begin
S[4] := IndStr[d];
for e := 1 to 4 do begin
S[5] := IndStr[e];
for f := 1 to 4 do begin
S[6] := IndStr[f];
for g := 1 to 4 do begin
S[7] := IndStr[g];
for h := 1 to 4 do begin
S[8] := IndStr[h];
if Calc(S) = 100 then WriteLn(S);
end; end; end; end; end; end; end; end;

end;

begin

WriteAllCombinations;
WriteLn('With the best regards...');
ReadLn

end.


будут вопросы спрашивай(

Сообщение отредактировано: volvo - 17.12.2004 11:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
reill
сообщение 21.04.2003 10:48
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 52

Репутация: -  0  +


2___ALex___ на счет вариантов не знаю так в задании было написанно...
Спасибко сейчас будем тестить...
2GLuk Да задания похожие... Вариант с подобным перебором я написал , но мне сказали надо что-то новенькое придумать....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 21.04.2003 16:45
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


как потестишь напишешь как ОНО
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 21.04.2003 17:17
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


если интересно
средняя скорость данного алгоритма 81 миллисекунда
достаточно приемлемо на мой взгляд
придирок со стороны препода не должно быть
измерения проводил на 3-ем пне(800 MHz)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlaRic
сообщение 21.04.2003 17:25
Сообщение #12


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


to All: просьба большие тексты помещать в код!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Slam
сообщение 21.04.2003 17:47
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 136
Пол: Мужской

Репутация: -  0  +


Цитата
to All: просьба большие тексты помещать в код!

Странное совпадение - 5 минут назад я хотел тоже самое написать, а потом подумал, кто меня послушает...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
reill
сообщение 21.04.2003 20:27
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 52

Репутация: -  0  +


Потестил...
Уж твою среднюю скорость не удалос заценить так как нету у меня твоего модуля системутилс(((SysUtils)
Уж поделись....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 21.04.2003 21:12
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


она в Delphi писалась
завтра переделаю сегодня уже время поджимает
там совсем немного надо исправить
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 22.04.2003 11:59
Сообщение #16


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


вот держи
как потестишь напишешь...

Код
program ForForum;
uses Crt;

procedure WriteAllCombinations;
const
IndStr: String[4] = '+-*/';
var
a, b, c, d, e, f, g, h: Byte;
S: String[8];

function Calc(S: String): Real;
var
i: Byte;
Res, PromRes: Real;
F, Fl: Boolean;
begin

Res := 0;
i := 1;
repeat
 F := False;
 Fl := False;
 while S[i] in ['*', '/'] do begin
  Fl := True;
  case S[i] of
   '*': if not F then begin
         PromRes := (Sqr(i) + i);
         if i > 1 then begin
          if S[i - 1] = '-' then PromRes := -1 * PromRes;
          S[i - 1] := ' ';
         end;
        end else PromRes := PromRes * (i + 1);
   '/': if not F then begin
         PromRes := i / (i + 1);
         if i > 1 then begin
          if S[i - 1] = '-' then PromRes := -1 * PromRes;
          S[i - 1] := ' ';
         end;
       end else PromRes := PromRes / (i + 1);
  end;
  Inc(i);
  F := True;
 end;
 Inc(i);
 if Fl then Res := Res + PromRes;
until i > 8;

for i := 1 to 8 do
case S[i] of
 '+': if i = 1 then Res := Res + 3 else Res := Res + i + 1;
 '-': if i = 1 then Res := Res - 1 else Res := Res - i - 1;
end;

if S[1] = ' ' then Calc := Res + 1 else Calc := Res

end;

begin

S[0] := #8;
for a := 1 to 4 do begin
S[1] := IndStr[a];
for b := 1 to 4 do begin
S[2] := IndStr[b];
for c := 1 to 4 do begin
S[3] := IndStr[c];
for d := 1 to 4 do begin
S[4] := IndStr[d];
for e := 1 to 4 do begin
S[5] := IndStr[e];
for f := 1 to 4 do begin
S[6] := IndStr[f];
for g := 1 to 4 do begin
S[7] := IndStr[g];
for h := 1 to 4 do begin
S[8] := IndStr[h];
if Calc(S) = 100 then WriteLn(S);
end; end; end; end; end; end; end; end;

end;

begin

ClrScr;
WriteAllCombinations;
WriteLn('With the best regards...');
repeat until KeyPressed

end.


Сообщение отредактировано: volvo - 17.12.2004 11:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Slam
сообщение 22.04.2003 18:53
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 136
Пол: Мужской

Репутация: -  0  +


Блин, ___ALex___:
Цитата
просьба большие тексты помещать в код!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 22.04.2003 19:15
Сообщение #18


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


to Slam
каким образом?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
reill
сообщение 29.04.2003 13:53
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 52

Репутация: -  0  +


А какой алгоритм проги??? Что в большом цикле происходит??? Ты пользуешься своей какой-то ормулой??? Напиши все сои рассчеты и алгоритм, желательно до завтра...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlaRic
сообщение 29.04.2003 18:35
Сообщение #20


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


Цитата
to Slam
каким образом?

Посмотри на кнопки во втором ряду при ответе!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 15:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"