0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 2
1

Возможность получения одной строки из другой путем вычеркивания

13.10.2019, 16:44. Показов 557. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Задача: определить, можно ли получить первую строку из второй, путём вычеркивания последовательных элементов. yes - если да, no - если нет. Из того что вспомнил и нагуглил, получил следующее:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
  t: text;
  s1, s2: string;
  i: integer;
  f: boolean;
 
begin
  assign(t, 'input.txt');
  reset(t);
  readln(t, s1);
  readln(t, s2);
  close(t);
  {writeln('s1=');
  readln(s1);
  writeln('s2=');
  readln(s2);}
  f := true;
  i := 1;
  while(i <= length(s2)) and f do
    if pos(s1[i], s2) = 0 then f := false
    else
    begin
      delete(s2, pos(s1[i], s2), 1);
      i := i + 1;
    end;
  if f then write('yes')
  else write('no');
end.
Программа считает, можно ли получить из элементов второй строки первую, не учитывая порядок расположения символов. Т.е. из 4321 можно получить 123 или из home получить hemo, хотя по условию, вычеркиванием такое получаться не может. Подскажите, пожалуйста, в какую сторону думать
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2019, 16:44
Ответы с готовыми решениями:

Можно ли строку получить из другой строки путем вычеркивания некоторых символов?
Помогите, пожалуйста, решить задачку. даны две строки st1 и st2 . выяснить, можно ли строку st2...

Составить процедуру для получения из квадратной матрицы A(n,n), n<=6 матрицы B(n,n-1) путем вычеркивания элементов главной диагонали исходной
Помогите пожалуйста составить процедуру для Паскаля: Составить процедуру для получения из...

Количество способов преобразования строки путём вычёркивания символов
Есть две строки Х и У, в которых содержатся только буквы латинского алфавита и цифры (длинны не...

Получить матрицу, путем вычеркивания с данной матрицы, Н-ой строки и М-го столбика
Ребят, напишите плиз прогу на с++. Условие: Получить матрицу, путем вычеркивания с данной...

4
254 / 147 / 69
Регистрация: 29.07.2018
Сообщений: 1,161
13.10.2019, 18:35 2
Khazdar, Такой вариант вам подходит?

Pascal
1
2
3
4
5
6
7
8
begin
  var txt := ReadAllLines('input.txt');
  var s1 := txt[0];
  var s2 := txt[1];
  if pos(s2, s1) > 0
    then writeln('Yes')
  else writeln('No');
end.
Добавлено через 2 минуты
или так

Pascal
1
2
3
4
5
6
7
begin
  var s1 := ReadString('s1=');
  var s2 := ReadString('s2=');
  if pos(s2, s1) > 0
    then writeln('Yes')
  else writeln('No');
end.
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 2
14.10.2019, 01:05  [ТС] 3
Пс, благодарю за вариант, к сожалению не подходит.
в данном случае, как я понимаю, происходит поиск непосредственно строки в другой строке.
в таком случае вариант получения, например, 124 из строки 1234 (вычеркивание тройки) невозможен.

здесь, похоже, нужно прикрутить счетчик поэлементного сравнения с удалением элемента исходной строки при несовпадении, но никак не могу это представить в виде кода

Добавлено через 5 часов 55 минут
в общем, с помощью костылей и рюмки чая получилось что-то вида
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var
  t: text;
  s1, s2: string;
  i: integer;
  f: boolean;
  label m1;
begin
  {assign(t, 'input.txt');
  reset(t);
  readln(t, s1);
  readln(t, s2);
  close(t);} //for file input
  writeln('s1=');
  readln(s1);
  writeln('s2=');
  readln(s2);
  f := true;
  i := 1;
  while i<=(length(s1)) do
  begin
    m1:
    begin
    if pos(s1[i], s2) = 0 then 
    begin
      f := false;
      break;
    end
    else if s1[i] = s2[i] then i := i + 1
      else 
        begin
        delete(s2, i, 1);
        goto m1;
        end
      end;
      end;
  if f then write('yes')
  else write('no');
end.
вроде бы работает. по крайней мере, те проверки, которые могли взбрести в мою голову, получаются верными
0
4962 / 2565 / 2315
Регистрация: 10.12.2014
Сообщений: 9,830
14.10.2019, 12:44 4
Pascal
1
2
3
4
5
6
const
  ans : array [Boolean] of String[3] = ('no', 'yes');
begin
  var(s1,s2):=ReadlnString2;
  ans[s2.Sorted.JoinIntoString('').Contains(s1.Sorted.JoinIntoString(''))].Print;
end.
0
140 / 107 / 56
Регистрация: 15.09.2017
Сообщений: 425
14.10.2019, 14:57 5
Цитата Сообщение от JuriiMW Посмотреть сообщение
Pascal
1
2
const
  ans : array [Boolean] of String[3] = ('no', 'yes');
Статические массивы это же мусор, лучше использовать словари:

Pascal
1
2
3
4
5
6
var ans := Dict(KV(false, 'no'), KV(true, 'yes'));
 
begin
  var(s1,s2):=ReadlnString2;
  ans[s2.Sorted.JoinIntoString('').Contains(s1.Sorted.JoinIntoString(''))].Print;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2019, 14:57
Помогаю со студенческими работами здесь

Выяснить, можно ли строку st2 получить из строки st1 путем вычеркивания некоторых символов
Даны две строки st1 и st2. Нужно выяснить, можно ли строку st2 получить из строки st1 путем...

возможность получения из перовой строки второй
Прошу помощи людей которые понимают в паскале больше чем я =) и помогут решить вот такую детскую...

Проверка графа на возможность достижимости одной вершины из другой
Дана система двусторонних дорог, соединяющих пары городов. Является ли заданное множество дорог...

Получить 2 строку из 1 путем вычеркивания символов
Даны две строки st1 и st2. Нужно выяснить, можно ли строку st2 получить из строки st1 путем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru