Рассмотрим следующую задачу для подготовки к ЕГЭ с сайта К.Полякова (задача 25, вариант 1):
(№ 4410) (Л. Шастин) Среди чисел, больших 520000, найти такие, сумма всех делителей которых, не считая единицы и самого числа, образует число-палиндром (например, число 1221: если его «перевернуть», получается то же самое число). Вывести первые пять чисел, удовлетворяющих вышеописанному условию, справа от каждого числа вывести его максимальный делитель.
Получить список делителей числа можно с помощью функции divisors, описанной в статье «Разложение на множители и простые числа».
Как определить, является ли число палиндромом? Наверно, самый короткий способ — преобразовать число в символьную строку и проверить строку «на палиндромность». Самое простое — сравнить исходную строку с «перевернутой задом наперед». В Питоне получить из некой строки s перевернутую строку очень просто: s[::-1]. (Если в операции получения подстроки записаны три параметра, то третий параметр — это шаг. С его помощью можно получить, например, каждый второй или каждый третий символ, а можно и перевернуть строку.)
Программирование на С++. Урок 90. Палиндром
Для пишущих на других языках приведу функцию, которая проверяет, является ли строка палиндромом (эта функция легоко реализуется на паскале или С++). Создадим пустую строку и будем присоединять к её началу поочередно символы исходной строки. Мы получим строку «задом наперед». Если она равна исходной строке, то наша строка — палиндром.
Вот текст функции
def palindrom(s):
t=»
for i in range(len(s)): t=s[i]+t
return s==t
Основная программа очень проста. По очереди раскладываем числа 520001, 520002 и т.д. на множители, вычисляем их сумму. Если сумма — палиндром, то печатаем число и его наибольший множитель. В переменной k мы подсчитываем количество найденных чисел. Когда будет найдено пять чисел, цикл завершается.
Для преобразования числа в символьную строку используем функцию Питона str, для суммирования элементов массива — функцию sum и для поиска максимального элемента массива — функцию max.
Приведем полный текст программы:
def divisors(n):
d=[]
k=2
while k*k if n%k == 0:
d.append(k)
k2 = n//k
if k2 > k: d.append(k2)
k += 1
return d
n=520001
k=0
while k < 5:
d = divisors(n)
if len(d) > 0 and str(sum(d)) == str(sum(d))[::-1]:
print(n,max(d))
k += 1
n += 1
Условие len(d) > 0 нужно для того, чтобы убедиться, что массив делителей не пустой. (Если массив пустой, то функция sum выдаст 0, он будет преобразован в строку «0», которая, очевидно, является палиндромом, а при попытке найти в пустом массиве наибольший элемент возникнет ошибка выполнения. Проверка len(d)> 0 исключает подобные неприятности.)
Результат выполнения программы следующий:
520211 16781
520993 47363
Математические операции для поиска палиндрома
521653 47423
521947 16837
522077 22699
Он совпадает с приведенным на сайте ответом.
Программа выполняется очень быстро (десятые доли секунды).
(c) Ю.Д.Красильников, 2021-2022 г.
Источник: ege-informatika-yk.blogspot.com
Программа является ли число палиндромом паскаль
Помогите написать программу с использование функций или процедур
Написать программу, позволяющую определить является ли натуральное число палиндромом.
Участник клуба
Регистрация: 05.11.2013
Сообщений: 1,602
Регистрация: 27.05.2014
Сообщений: 2
uses crt;
var a,b,c:word;
begin
write(‘Введите число:’);readln(a);
b:=0;
c:=a;
while c>0 do begin
b:=b*10+c mod 10;
c:=c div 10;
end;
if a=b then write(‘Да’) else write(‘Нет’)
end.
Как просто делать программу с полиндромом знаю. а вот через процедуры и функции нет.
Участник клуба
Регистрация: 05.11.2013
Сообщений: 1,602
Made In USSR!
Регистрация: 01.09.2010
Сообщений: 3,657
function Reverse(N:Longint):Longint; var buf:longint; begin buf:=0; while n>0 do begin buf:=buf*10+n mod 10; n:=n div 10; end; Reverse:=buf; end; var c:Longint; begin Readln(c); Writeln(c=Reverse(c)); end.
«. В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал. »
(c) Юрий Клинских aka «Хой»
Источник: www.programmersforum.ru
Программирование на языке Pascal от Елены Клейн
Хотите стать программистом? Научиться писать программы? С чего начать? Давайте начнем с языка Паскаль.
пятница, 7 ноября 2014 г.
Занятие 9. Палиндром, или почему Аргентина манит негра?
Сегодня мы рассмотрим еще одну стандартную олимпиадную (уровня районной олимпиады) задачу: проверить, является ли НЕЧТО палиндромом.
Во-первых: что такое палиндром. Палиндром — это запись, которая одинаково читается слева направо и справа налево. Например, число 12321 можно считать палиндромом. Как и слово кабак. А бывают целые фразы — палиндромы: Аргентина манит негра; А роза упала на лапу Азора.
Встречаются стихи — палиндромы и даже рассказы — палиндромы. О романах-палиндромах лично я не слышала, но я верю в людей.
Во-вторых: почему НЕЧТО. Потому, что в зависимости от того, исследуем мы на палиндромность число, слово или фразу — задача может быть решена по-разному. Давайте рассмотрим все варианты решений.
Итак, вариант 1.
Проверить, является ли число палиндромом.
Идея решения: вводим число a — то, которое будем проверять. Потом, используя цикл While — «пока» с помощью двух меняющихся в ходе выполнения цикла переменных b и c делаем следующую операцию: «откусываем» последнюю цифру от a и запоминаем её как временное значение c. На следующем витке цикла мы умножаем полученное ранее c на 10, и прибавляем следующую цифру. И так, пока не получим конечное число c, которое по сути является числом a, записанным задом наперед.
Затем мы сравниваем a и c, и, если числа равны, выводим сообщение о том, что число — палиндром, или о том, что не палиндром, в противном случае.
Перед вами результат работы программы, реализовавшей эту идею решения:
Введите целое положительное число a=123456
c=6 b=12345
c=65 b=1234
c=654 b=123
c=6543 b=12
c=65432 b=1
c=654321 b=0
654321
Не палиндром
Понятен ли вам принцип? Возникает вопрос, как «откусить» цифру. Тут нам помогут функции div и mod, о которых вы можете прочесть в Словарике. Коротко:
Источник: informatika117pas.blogspot.com