Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];

Вниз

задачка   Найти похожие ветки 

 
Друмлин   (2003-02-10 18:01) [0]

Help,plz! Не знаю даже с какого конца подойти:
Дана последовательность цифр длины N (1001>N>19). Надо расставить между ними знаки "+" "-" "*" и скобки так, чтобы получившееся выражение равнялось 0. Ограничение по времени: 10 секунд.
пример> исходная последовательность: 348193115789
после расстановки знаков: (3+4+8+1+9)*(3+1+1-5)*(7+8+9)=0


 
Cr@sh   (2003-02-10 18:10) [1]

Делай так чтоб в любой скобке был ноль, вот и все...


 
AM   (2003-02-10 18:10) [2]

Тебе просто нужно сделать множитель равный = 0, например в твоем примере можно было сделать проще:
(3+4+8+1+9+3)*(1-1)*(5+7+8+9)=0 :)


 
Cr@sh   (2003-02-10 18:10) [3]

(3+4-8+1)*(9+3+1+1+5+7+8+9+)=0


 
Друмлин   (2003-02-10 18:27) [4]

ну ето же только пример =)
предлагаете перебор??


 
Sha   (2003-02-11 09:59) [5]

2 Друмлин (10.02.03 18:27)

А чем плох хороший перебор?
Скорее всего и не потребуется перебирать все 20 цифр.
А для непереборного алгоритм, который первым приходит в голову, надо около 30 цифр, что противоречит условиям задачи.



 
uw   (2003-02-11 11:53) [6]

Чем же вам не понравилось предложение AM (10.02.03 18:10)?


 
Igorek   (2003-02-11 12:13) [7]

Задачка не так проста если нужен эфективный алгоритм нахождения подпоследовательности, сводимой к нулю. В "Жемчужинах программирования" есть похожий пример и шустрый алгоритм.


 
Sha   (2003-02-11 12:43) [8]

> uw © (11.02.03 11:53)
> Чем же вам не понравилось предложение AM (10.02.03 18:10)?

А где там алгоритм?



 
uw   (2003-02-11 12:51) [9]

Я решил, что цифры можно переставлять, теперь мне это предложение тоже не нравится.


 
Sha   (2003-02-11 17:00) [10]

2 Друмлин (10.02.03 18:01)

Держи решение:

var
a: array of byte;
sgn, first, last: integer;

function ZeroSum(i1, i2: integer): boolean;
var
i, j, k, minus, sum: integer;
begin;
Result:=false;

Minus:=1; for i:=1 to i2-i1 do Minus:=Minus shl 1;

for k:=0 to Minus-1 do begin;
sum:=0;
j:=k;
for i:=i2 downto i1 do begin;
if odd(j) then dec(sum,a[i]) else inc(sum,a[i]);
j:=j shr 1;
end;
if sum=0 then begin;
first:=i1; last:=i2; sgn:=k; Result:=true; break;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i, j, h: integer;
s: string;
label
Done;
begin;
s:=Edit1.Text;
h:=Length(s)-1;

for i:=1 to 1+h do if (s[i]<"0") or (s[i]>"9") then h:=-1;
if h<=19 then begin;
Edit2.Text:="неверные данные"; exit;
end;

SetLength(a,h+1);
for i:=0 to h do a[i]:=byte(s[1+i])-byte("0");

first:=-1;
for j:=0 to h do // длина
for i:=0 to h-j do // нач положение
if ZeroSum(i,i+j) then goto Done;

Done:
if first<0 then s:="нет решения"
else begin;
s:=s+")";
for i:=h downto last+1 do Insert("+",s,1+i);
if last<h then Insert(")x(",s,2+last);
j:=sgn;
for i:=last downto first do begin;
if odd(j) then Insert("-",s,1+i) else Insert("+",s,1+i);
j:=j shr 1;
end;
if 0<first then Insert(")x(",s,1+first);
for i:=first-1 downto 0 do Insert("+",s,1+i);
s:="("+s;
end;
Edit2.Text:=s;
end;


 
Sha   (2003-02-11 17:20) [11]

Да, для порядка перед последним end добаиь строчку:

a:=nil;



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
6-87583
pkolom
2003-01-06 16:21
2003.02.27
Порт 80


14-87703
SniZ
2003-02-11 22:12
2003.02.27
Dark BAsic


14-87676
passm
2003-02-11 10:04
2003.02.27
Отладка DLL


1-87566
V-Isa
2003-02-17 14:14
2003.02.27
StringGrid


3-87290
mUTant
2003-02-05 23:35
2003.02.27
Как запустить программу на машине на которой не установлен Parado





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский