Знаю, что тем о палендроме уже открыто очень много, но в них я не нашел именно того, что мне нужно.
Для начала нужно ввести с клавиатуры число N, которое означает количество чисел в строчке. Ниже, ввести в строчку целые числа(через пробел), среди которых нужно найти самые длинные палиндромы. Количество чисел в строке зависит от N.
И что конкретно из этого всего вызывает затруднения? Не можешь ввести N? Или проблема со считыванием после этого N чисел? Или способа проверки числа на "палиндром", выложенного в FAQ-е недостаточно, и специально для тебя надо переписать его еще и здесь? Где затруднения?
volvo
{ здесь is_palindrom из FAQ-а }
type
PT = ^T;
T = array[1 .. 1] of longint;
var
arr: PT;
n, count, i: integer;
X: longint;
begin
write('n = '); readln(n);
getmem(arr, n * sizeof(longint));
count := 0;
while not eoln do begin
read(X);
if is_palindrom(X) then begin
inc(count); arr^[count] := X;
end;
end;
for i := 1 to count do
writeln(arr^[i]);
freemem(arr, n * sizeof(longint))
end.
Я все сделал как ты сказал, но прога вместо палиндромов, просто выдает все числа, которые я ввел. Вот код проги:
Что ты говоришь? А какие ты ввел числа, я что, догадаться должен? У меня пример работает, я вообще не имею привычки непроверенный код выкладывать...
n=6
1 2 2 1 0 7
1
2
2
1
0
7
а должно показывать только палиндромы(1 2 2 1)
Да? С какого перепуга? Числа рассматриваются ПО ОТДЕЛЬНОСТИ!
"1" - это палиндром? Да, попробуй опровергнуть...
"2" - то же самое...
А может быть, "7" - не палиндром? Семерка что, читается "вперед" и "назад" как-то по-разному?
Задание нормально сформулируй (и не дублируй топики - это к добру не приведет, ты, оказывается, уже задавал этот же вопрос здесь: http://forum.pascal.net.ru/index.php?showtopic=20566 ...)
Нужно найти не числа-палиндромы, а цепочки-палендромы(типо не число 1221, а последовательность, скажем, 4 цифер 1 2 2 1).
А теперь перечитай свое первое сообщение... В какой именно строчке фигурирует слово "цепочки", можно узнать?
У тебя написано так:
извини, я немного туплю. Просто целую ночь над задачей сижу.
В таком случае (я про задачу), тебе вообще лучше работать со строкой, а не с числами:
function space(s: string): boolean;Тестировалось на закомментированных значениях - вроде выдает правильный результат...
begin
space := (s[1] = ' ') and (s[length(s)] = ' ');
end;
function trim(s: string): string;
begin
while (s <> '') and (pos(' ', s) > 0) do
delete(s, pos(' ', s), 1);
trim := s;
end;
function revert(s: string): string;
var
rev: string;
i: integer;
begin
rev := '';
for i := 1 to length(s) do rev := s[i] + rev;
revert := rev;
end;
var
i, j: integer;
s, st, max_s: string;
begin
{
s := '1 2 2 1 0 7';
s := '1 2 2 1 33 21 12 33 1 5';
s := '1 2 2 1 33 21 12 373 1 5';
}
readln(s);
s := ' ' + s + ' ';
max_s := '';
for i := 1 to length(s) - 1 do begin
for j := 1 to length(s) - i do begin
st := copy(s, i, j);
if space(st) and (trim(st) = revert(trim(st))) then begin
if length(max_s) < length(st) then max_s := st;
end;
end;
end;
writeln(max_s);
end.
Большое спасибо. Почему я не могу дать плюсик? Когда я клацаю, ничего не происходит.
Смотри здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=15545&view=findpost&p=92448
М | Плюсик за тебя добавил. Темы не дублируй. |