Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 12:03   #1
zink
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию Сравнить буквы в строках

Вводится n строк вида "XY", где X и Y любые буквы латинского алфавита. X может быть равно Y.

Пример: при n=7
7
CD
AD
CC
DC
BC
DD
CD

Нужно посчитать максимальное число повторных букв в конце строк
Если буквы одинаковые ничего не происходит, если буква стоит на 2 позиции к ней добавляется 1, если буква стоит на 1 позиции от нее отнимается 1. Если буква стоящая на 1 позиции равна 0, то она остается 0, а к букве на 2 позиции ничего не прибавляется и не отнимается.

D:=1; C:=1; A:=1; B:=1;

CD d=2 c=0
AD d=3 c=0 a=0
CC d=3 c=0 a=0
DC d=2 c=1 a=0
BC d=2 c=2 a=0 b=0
DD d=2 c=2 a=0 b=0
BD d=2 c=2 a=0 b=0
CD d=3 c=1 a=0 b=0

нужно вывести максимальный элемент. В этом случае D=3
zink вне форума Ответить с цитированием
Старый 30.03.2011, 12:58   #2
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Все буквы изночально равны 1?
Акоб вне форума Ответить с цитированием
Старый 30.03.2011, 13:34   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Можно попробовать так
Код:
var
 ArrayForChars: Array[0..25] of integer;
 StrAtoZ      : string[2];
 i            : integer;
 n            : integer;
begin
 for i := 0 to 25 do ArrayForChars[i] := 0;
 n := 7;
 for i := 1 to n do
 begin
   StrAtoZ := Не знаю откуда берёте строки, потому сами записывайте сюда каждую строку;
   ArrayForChars[Ord(StrAtoZ[1])-65] := ArrayForChars[Ord(StrAtoZ[1])-65] - 1;
   ArrayForChars[Ord(StrAtoZ[2])-65] := ArrayForChars[Ord(StrAtoZ[2])-65] + 1;
 end;
end;
Вывести статистику из ArrayForChars думаю догадаетесь как.
Подправьте под Pascal, если необходимо, т.к. я писал в Delphi
До свидания
OlegVE вне форума Ответить с цитированием
Старый 30.03.2011, 13:59   #4
zink
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Акоб Посмотреть сообщение
Все буквы изночально равны 1?
Да

Цитата:
Сообщение от OlegVE Посмотреть сообщение
Вывести статистику из ArrayForChars думаю догадаетесь как.
Подправьте под Pascal, если необходимо, т.к. я писал в Delphi
До свидания
Спасибо!
Там еще доп условие:
Если буква стоящая на 1 позиции равна 0, то она остается 0, а к букве на 2 позиции ничего не прибавляется и не отнимается.
DD d=2 c=2 a=0 b=0
BD d=2 c=2 a=0 b=0 {b уже равно 0, значит ни каких действий не выполнять}

В этом сложность, это условие же не впишешь в цикл

Последний раз редактировалось zink; 30.03.2011 в 14:06.
zink вне форума Ответить с цитированием
Старый 30.03.2011, 14:17   #5
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от zink Посмотреть сообщение
Если буква стоящая на 1 позиции равна 0, то она остается 0, а к букве на 2 позиции ничего не прибавляется и не отнимается.
Почти не понял... Что за буква 0 (Это ноль?). Если на первой и второй позициях стоит одна и та-же буква, то в первой строке кода в цикле отнимается 1 а во второй прибавляется 1, в итого 0. Ухожу на обед.
P.S. Добавьте if на проверку Ord(StrAtoZ[1]), больше не знаю пока что сказать.

Последний раз редактировалось OlegVE; 30.03.2011 в 14:19.
OlegVE вне форума Ответить с цитированием
Старый 30.03.2011, 14:34   #6
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Код:
Type strochki = array[1..50] of string;
Type res = array[60..120] of Byte;
var st: strochki; Buff:res;  i,n,t:integer; max:Byte;
begin
write('n = '); readln(n);
for i := 1 to n do
readln(st[i]);
for i := 60 to 120 do Buff[i] := 1;

for i := 1 to n*2 do
begin
dec(Buff[ord(st[i][1])]);
inc(Buff[ord(st[i][2])]);
end;
max := Buff[60];
for i := 60 to 120 do
begin
if max < Buff[i] then begin max := Buff[i]; N := i; end
end;
writeln(max);
writeln(chr(N));
end.
Акоб вне форума Ответить с цитированием
Старый 30.03.2011, 15:05   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Акоб, не берусь утверждать на 100%
но, не увидел, где у Вас:
Цитата:
Если буква стоящая на 1 позиции равна 0, то она остается 0, а к букве на 2 позиции ничего не прибавляется и не отнимается.
и второе.
проверьте на таких данных:
Код:
const
  st :array[1..7] of string[2] = ('XC', 'AD','XC','DC','BC','DD','CD');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2011, 16:00   #8
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Там нету этого условия.
Я исправил код,но он только для больших букв.
Код:
Type strochki = array[1..50] of string[2];
Type res = array[65..90] of integer;
var st: strochki; Buff:res;  i,n,t:integer; max:integer;
begin
write('n = '); readln(n);
for i := 1 to n do
readln(st[i]);
for i := 65 to 90 do Buff[i] := 1;

for i := 1 to n*2 do
begin
if Buff[ord(st[i][1])] = 0 then
begin
dec(Buff[ord(st[i][2])]);
inc(Buff[ord(st[i][1])]);
end;
inc(Buff[ord(st[i][2])]);
dec(Buff[ord(st[i][1])]);
end;
max := -100;
for i := 65 to 90 do
begin
if max < Buff[i] then begin max := Buff[i]; N := i; end
end;
writeln(max);
writeln(chr(N));
end.
Ответ на ваш C = 3.
Акоб вне форума Ответить с цитированием
Старый 30.03.2011, 16:22   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ответ на ваш C = 3.
ок.
кстати, а кто нибудь может мне объяснить,
а зачем подобная головоломка может быть полезна?
Или это чистая абстракция не имеющая отношения ни к одному реальному процессу?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2011, 19:20   #10
zink
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию

Акоб спасибо.

Serge_Bliznykov, это часть задачи. Нужна была для нахождения размерности массива.

В один из дней к складскому помещению привезли N ящиков. Каждый из ящиков был
помечен одной буквой латинского алфавита. Причем i-му ящику соответствовала i-ая буква
латинского алфавита. На складе по счастливой случайности как раз имелось N свободных
площадок расположенных в ряд. Каждой из площадок была приписана одна буква латинского
алфавита.
Грузчику Василию поступило указание выполнить M операций вида XY, где X и Y –
латинские буквы. Операция вида XY означает, что необходимо взять самый верхний ящик с
площадки, помеченной буквой X и положить его на площадку помеченную буквой Y. Новый
ящик можно поставить только на тот, который был поставлен на эту площадку до него. То есть
ящики будут образовывать столбик.

Ваша прога ищет размерность Этого массива
Изображения
Тип файла: jpg exmpl.JPG (22.9 Кб, 79 просмотров)

Последний раз редактировалось zink; 30.03.2011 в 19:38.
zink вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр в строках, а не в столбцах? MaxxVer Microsoft Office Excel 22 26.09.2017 11:18
поиск в строках katena88 Общие вопросы C/C++ 3 28.10.2010 13:26
Счетчик в строках Grid serik_f БД в Delphi 2 18.03.2010 02:23
числа в строках на C++ Builder Dimon Фриланс 2 22.10.2009 15:30
Анси и Юникод в строках.... Johnson PHP 7 03.10.2008 22:20