Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 30.09.2020
Сообщений: 7
1

Волшебное дерево

30.09.2020, 11:20. Показов 4920. Ответов 9

Author24 — интернет-сервис помощи студентам
Волшебное дерево
ограничение по времени на тест1 секунда
ограничение по памяти на тест256 мегабайт
вводстандартный ввод
выводстандартный вывод
На волшебном дереве росли апельсины, бананы и сливы, а яблоки еще не выросли — не сезон.

Известно, что если сорвать и съесть подряд апельсин и банан (именно в таком порядке), то на дереве вырастет одна слива. Если сорвать и съесть подряд в любом порядке банан и сливу, то вырастает апельсин. А если сорвать и съесть подряд два банана, то на волшебном дереве вырастает один банан. В других случаях ничего не вырастает.

Дана последовательность поедания всех фруктов в виде строки символов «a», «b» и «c». Длина строки не превышает 255. Найти количество апельсинов, бананов и слив, выросших на дереве после поедания всех фруктов.

Входные данные
В единственной строке входного файла записаны символы «a», «b» и «c». Длина строки не превышает 255.

Выходные данные
Вывести количество апельсинов, бананов и слив.

Пример
входные данные
bbbabacbccbacacc
выходные данные
2 1 1
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2020, 11:20
Ответы с готовыми решениями:

Сформировать дерево Т и определить число вхождений параметра Е в дерево Т - Блок схема
Сформировать дерево Т и определить число вхождений параметра Е в дерево Т. Вот решение задачи,...

Волшебное исчезновение куска базы данных
Всем добрый день, надеюсь что хоть тут разгадают тайну моего сайта Помогите разобраться с этой...

EFI PART: "Волшебное слово" remove this media and press any key
Что я делаю: Устанавливаю Windows 10 на Kali Linux не в первый раз. ISO-образ из надёжного сайта....

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

9
3022 / 1646 / 651
Регистрация: 19.03.2019
Сообщений: 5,322
30.09.2020, 14:20 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
begin
  var s := ReadlnString; // 'bbbabacbccbacacc';
  var(a,b,c):=(0,0,0);
  var d := 0;
  while s.Length>0 do begin
    d:=1; 
    if Copy(s,1,2)='ab' then begin inc(c); d:=2 end
    else
      if (Copy(s,1,2)='bc') or (Copy(s,1,2)='cb')  then begin inc(a); d:=2 end
      else if Copy(s,1,2)='bb' then begin inc(b); d:=2 end;
    Delete(s,1,d)  
  end;
  $'{a} {b} {c}'.Println;
end.
0
1178 / 429 / 194
Регистрация: 23.03.2020
Сообщений: 1,016
Записей в блоге: 1
30.09.2020, 16:52 3
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Оптимизация
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  var s := ReadlnString;  //'bbbabacbccbacacc';
  var(a,b,c):=(0,0,0);
  while s.Length>0 do begin
    var d := 2; 
    case Copy(s,1,2) of
      'bc', 'cb':  a += 1;
      'bb':        b += 1;
      'ab':        c += 1;
     else d := 1;
    end;
    Delete(s,1,d)  
  end;
  $'{a} {b} {c}'.Println;
end.
1
3022 / 1646 / 651
Регистрация: 19.03.2019
Сообщений: 5,322
30.09.2020, 17:48 4
Цитата Сообщение от canadamoscow Посмотреть сообщение
Pascal
1
case Copy(s,1,2) of
я хотел проверить подобную конструкцию, недопустимую ни в одном нормальном Паскале, но потом не поверил, что такое может быть. оказалось, зря, PABC.NET и по строке умеет Case of делать!
0
2309 / 1420 / 516
Регистрация: 07.04.2017
Сообщений: 4,723
01.10.2020, 18:16 5
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
недопустимую ни в одном нормальном Паскале
А по моему в ABC.Net строки в case таки для совместимости, с паскалями где строки - размеры. В остальном case поддерживает только размерные типы и даже не поддерживает значение nil для строк, которые иначе в нём работают.

В наш век лучше использовать match, с ним можно на много больше выкрутасов:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
##
match ReadString with
  
  'abc': '1'.Print;
  
  nil: '2'.Print;
  
  // если строки начинаются с [1] - сравнение с последовательностью [] для них сейчас не работает - issue#2316
  {$string_nullbased+}
  ['d', 'e', .., 'z']: '3'.Print;
  
  else '4'.Print;
end;
0
Status 418
Эксперт Python
4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
01.10.2020, 20:31 6
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
Delete(s,1,d)
а удаление зачем? алгоритм будет "квадрат".
1
3022 / 1646 / 651
Регистрация: 19.03.2019
Сообщений: 5,322
02.10.2020, 14:21 7
Цитата Сообщение от eaa Посмотреть сообщение
а удаление зачем? алгоритм будет "квадрат".
блин, точно, вот же я затупил!!!
достаточно переменную i и наращивать её на d
0
1178 / 429 / 194
Регистрация: 23.03.2020
Сообщений: 1,016
Записей в блоге: 1
02.10.2020, 16:07 8
Лучший ответ Сообщение было отмечено mr-Crocodile как решение

Решение

С учетом всех пожеланий:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  var s := ReadlnString;  //'bbbabacbccbacacc';
  var(a,b,c,d,index):=(0,0,0,1,0);
  repeat
    index += d;
    d := 2;
    match Copy(s,index,2) with
      'bc', 'cb':  a += 1;
      'bb':        b += 1;
      'ab':        c += 1;
     else d := 1;
    end;
  until index > s.Length-2;
  $'{a} {b} {c}'.Println;
end.
1
0 / 0 / 0
Регистрация: 26.09.2021
Сообщений: 2
26.09.2021, 23:15 9
Можно, пожалуйста, эту же задачу на плюсах?
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
03.10.2021, 22:42 10
Создайте тему в разделе https://www.cyberforum.ru/cpp-beginners/, при желании можете в Вашей теме указать ссылку на эту тему.
0
03.10.2021, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2021, 22:42
Помогаю со студенческими работами здесь

"Волшебное лассо" С#
Как создать функцию реализованную в фотошопе "волшебное лассо". Подскажите что почитать, куда...

Бинарное дерево: как происходит добавления элемента в дерево с двумя параметрами
Здравствуйте! Прошу помощи у опытных программистов...)))) Есть класс дерево: class class1 ...

Методы индексирования на основе функции расстояния. Универсальное деление гиперплоскостями. Дерево биссектрис и МВ-дерево
Доброго времени суток. В поисках информации для курсовика жизнь занесла сюда :) Поделитесь...

Как залезть в расчетное дерево (дерево зависимостей формул)?
Есть собственная формула, параметры которой заставляют для ее расчетов лезть на другие листы и в...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Дано дерево. Распечатать дерево по уровням
Дано дерево. Распечатать дерево по уровням.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru