Вопрос № 107953: Есть след. данные в файле:
"afio
ao"
Вывести в другой файл колличество букв, которые нужно удалить из первой строки что бы получить вторую
Например, в данном случае:
2
Требования:
Не использовать динам. программи...
Вопрос № 107.953
Есть след. данные в файле:
"afio
ao"
Вывести в другой файл колличество букв, которые нужно удалить из первой строки что бы получить вторую
Например, в данном случае:
2
Требования:
Не использовать динам. программирование (обе строки не превышают 100 символов)
Время выполнения: 1 сек.(доп. 2 сек.)
Место в памяти: 64 МБ
Отвечает: Coupler
Здравствуйте, Алин Сергей Владимирович! Этот вариант решения неправильный, т.к. не учитывает порядок. program q107953; var fin, fout: text; var s1, s2: string[100]; r,i:integer; begin assign(fin, 'in.dat'); reset(fin); readln(fin, s1); readln(fin, s2); close(fin); r:=length(s1) - length(s2);{предполагаем, что s2 можно составить из s1} for i:=1 to length(s2) do if pos(s2[i],s1)<1 then r:=-1;{если это не так, то возвращаем -1} assign(fout, 'out.dat');
rewrite(fout); write(fout, r); close(fout); end. Вот работающий вариант: program q107953; var fin, fout: text; var s1, s2: string[100]; r, i, j, k: integer; begin assign(fin, 'in.dat'); reset(fin); readln(fin, s1); readln(fin, s2); close(fin); k := 1; r := length(s1) - length(s2); if r < 0 then r := -1 else begin for i := 1 to
length(s2) do begin for j := k to length(s1) do begin if s2[i] = s1[j] then begin k := j + 1; break; end; r := -1; break; end; end; end; assign(fout, 'out.dat'); rewrite(fout); write(fout, r); close(fout); end.
Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 04.11.2007, 11:30 Оценка за ответ: 5 Комментарий оценки: классно! ответьте на вопрос на мине форуме, плЗ!
Отвечает: Gh0stik
Здравствуйте, Алин Сергей Владимирович!
Обращаю Ваше внимание на то, что предыдущий ответ не верный!!!. Проверьте его работу на таком наборе данных: fhw
hf
Очевидно что ответ должен быть -1, поскольку нельзя получить из строки1 строку2 путем удаления из нее символов.
Привожу свое решение: var i,j,k:word;
s1,s2:string;
begin
assign(input,'data.txt');
reset(input);
assign(output,'rez.txt');
readln(input,s1);
read(input,s2);
close(input);
k:=0;
j:=1;
assign(output,'rez.txt');
rewrite(output);
if length(s1) < length(s2) {если длина строки2 больше строки1, то решать дальше нет смысла}
then writeln(output,-1)
else
begin
for i:=1 to length(s2) do {последовательно ищем каждый символ строки2 в строке1 с учетом их порядка}
begin
while j<=length(s1) do
if s2[i]=s1[j]
then begin inc(k); break; end
else inc(j);
end;
if k=length(s2)
then write(output,length(s1)-k)
else writeln(output,-1);
end;
close(output);
end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 04.11.2007, 11:57 Оценка за ответ: 5 Комментарий оценки: хороши те, кто замечают ошибки других. вы один из них
Отвечает: Артём1983 !!! Здравствуйте, Алин Сергей Владимирович! Опишу своё решение. Я записываю в "выходной " файл разность длинн первои и второй строк. Смотрите код в приложении.
Приложение:
--------- Программирование - дело Путное!
Ответ отправил: Артём1983 (статус: 6-ой класс)
Ответ отправлен: 04.11.2007, 14:51