Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/103: Рейтинг темы: голосов - 103, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 10

Числа-палиндромы

24.03.2016, 22:33. Показов 20080. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: дана возрастающая последовательность палиндромов(чисел которые одинаково читаются слева направо и справа налево): https://www.cyberforum.ru/cgi-bin/latex.cgi?1, 2, 3, 4,..., 99, 101, 111,...
По заданному n найти n-e число этой последовательности. https://www.cyberforum.ru/cgi-bin/latex.cgi?1\le n \le 10^5
Понятно, что нужно откинуть идею полного перебора, но как иначе решить...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2016, 22:33
Ответы с готовыми решениями:

Удалить из последовательности числа, содержащие цифру 2, а среди оставшихся продублировать числа-палиндромы
Добрый вечер. Помогите пожалуйста решить задачу. Дана последовательность натуральных чисел {Aj}j=1...n (n<=10000). Удалить из...

Простые числа (палиндромы)
Задано целое число n>2. Составить программу для нахождения всех простых чисел с диапазона , которые являются палиндромами.

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

12
4 / 4 / 5
Регистрация: 25.05.2014
Сообщений: 50
25.03.2016, 00:11
Например, обрабатываешь число как строку.
Сравниваешь последний и первый символ и так далее.

Или пытаешься развернуть число, беря остаток от деления на 10.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
25.03.2016, 00:26
Python
1
str(x) == str(x)[::-1]
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 10
25.03.2016, 00:34  [ТС]
Свойство палиндрома это я понял. Просто вопрос в том, как именно находить n-й член последовательности. Что-то типо: перебирать числа начиная с 1 и проверять на условие str(x) == str(x)[::-1] и делать x += 1, не подходит, т.к. будет работать долго для 100000
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
25.03.2016, 01:16
Даже питон на таких числах не будет считать долго.

чтобы высчитать последнее число 999999

Bash
1
2
3
4
mbook:various jabbson$ time ./cyber.py
99999
 
real    0m0.121s
Добавлено через 1 минуту
на с++

Bash
1
real    0m0.033s
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
25.03.2016, 09:48
Michael96, перебрать один раз и закэшировать в файле или коде.

Дарю:

Кликните здесь для просмотра всего текста
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999, 1001, 1111, 1221, 1331, 1441, 1551, 1661, 1771, 1881, 1991, 2002, 2112, 2222, 2332, 2442, 2552, 2662, 2772, 2882, 2992, 3003, 3113, 3223, 3333, 3443, 3553, 3663, 3773, 3883, 3993, 4004, 4114, 4224, 4334, 4444, 4554, 4664, 4774, 4884, 4994, 5005, 5115, 5225, 5335, 5445, 5555, 5665, 5775, 5885, 5995, 6006, 6116, 6226, 6336, 6446, 6556, 6666, 6776, 6886, 6996, 7007, 7117, 7227, 7337, 7447, 7557, 7667, 7777, 7887, 7997, 8008, 8118, 8228, 8338, 8448, 8558, 8668, 8778, 8888, 8998, 9009, 9119, 9229, 9339, 9449, 9559, 9669, 9779, 9889, 9999, 10001, 10101, 10201, 10301, 10401, 10501, 10601, 10701, 10801, 10901, 11011, 11111, 11211, 11311, 11411, 11511, 11611, 11711, 11811, 11911, 12021, 12121, 12221, 12321, 12421, 12521, 12621, 12721, 12821, 12921, 13031, 13131, 13231, 13331, 13431, 13531, 13631, 13731, 13831, 13931, 14041, 14141, 14241, 14341, 14441, 14541, 14641, 14741, 14841, 14941, 15051, 15151, 15251, 15351, 15451, 15551, 15651, 15751, 15851, 15951, 16061, 16161, 16261, 16361, 16461, 16561, 16661, 16761, 16861, 16961, 17071, 17171, 17271, 17371, 17471, 17571, 17671, 17771, 17871, 17971, 18081, 18181, 18281, 18381, 18481, 18581, 18681, 18781, 18881, 18981, 19091, 19191, 19291, 19391, 19491, 19591, 19691, 19791, 19891, 19991, 20002, 20102, 20202, 20302, 20402, 20502, 20602, 20702, 20802, 20902, 21012, 21112, 21212, 21312, 21412, 21512, 21612, 21712, 21812, 21912, 22022, 22122, 22222, 22322, 22422, 22522, 22622, 22722, 22822, 22922, 23032, 23132, 23232, 23332, 23432, 23532, 23632, 23732, 23832, 23932, 24042, 24142, 24242, 24342, 24442, 24542, 24642, 24742, 24842, 24942, 25052, 25152, 25252, 25352, 25452, 25552, 25652, 25752, 25852, 25952, 26062, 26162, 26262, 26362, 26462, 26562, 26662, 26762, 26862, 26962, 27072, 27172, 27272, 27372, 27472, 27572, 27672, 27772, 27872, 27972, 28082, 28182, 28282, 28382, 28482, 28582, 28682, 28782, 28882, 28982, 29092, 29192, 29292, 29392, 29492, 29592, 29692, 29792, 29892, 29992, 30003, 30103, 30203, 30303, 30403, 30503, 30603, 30703, 30803, 30903, 31013, 31113, 31213, 31313, 31413, 31513, 31613, 31713, 31813, 31913, 32023, 32123, 32223, 32323, 32423, 32523, 32623, 32723, 32823, 32923, 33033, 33133, 33233, 33333, 33433, 33533, 33633, 33733, 33833, 33933, 34043, 34143, 34243, 34343, 34443, 34543, 34643, 34743, 34843, 34943, 35053, 35153, 35253, 35353, 35453, 35553, 35653, 35753, 35853, 35953, 36063, 36163, 36263, 36363, 36463, 36563, 36663, 36763, 36863, 36963, 37073, 37173, 37273, 37373, 37473, 37573, 37673, 37773, 37873, 37973, 38083, 38183, 38283, 38383, 38483, 38583, 38683, 38783, 38883, 38983, 39093, 39193, 39293, 39393, 39493, 39593, 39693, 39793, 39893, 39993, 40004, 40104, 40204, 40304, 40404, 40504, 40604, 40704, 40804, 40904, 41014, 41114, 41214, 41314, 41414, 41514, 41614, 41714, 41814, 41914, 42024, 42124, 42224, 42324, 42424, 42524, 42624, 42724, 42824, 42924, 43034, 43134, 43234, 43334, 43434, 43534, 43634, 43734, 43834, 43934, 44044, 44144, 44244, 44344, 44444, 44544, 44644, 44744, 44844, 44944, 45054, 45154, 45254, 45354, 45454, 45554, 45654, 45754, 45854, 45954, 46064, 46164, 46264, 46364, 46464, 46564, 46664, 46764, 46864, 46964, 47074, 47174, 47274, 47374, 47474, 47574, 47674, 47774, 47874, 47974, 48084, 48184, 48284, 48384, 48484, 48584, 48684, 48784, 48884, 48984, 49094, 49194, 49294, 49394, 49494, 49594, 49694, 49794, 49894, 49994, 50005, 50105, 50205, 50305, 50405, 50505, 50605, 50705, 50805, 50905, 51015, 51115, 51215, 51315, 51415, 51515, 51615, 51715, 51815, 51915, 52025, 52125, 52225, 52325, 52425, 52525, 52625, 52725, 52825, 52925, 53035, 53135, 53235, 53335, 53435, 53535, 53635, 53735, 53835, 53935, 54045, 54145, 54245, 54345, 54445, 54545, 54645, 54745, 54845, 54945, 55055, 55155, 55255, 55355, 55455, 55555, 55655, 55755, 55855, 55955, 56065, 56165, 56265, 56365, 56465, 56565, 56665, 56765, 56865, 56965, 57075, 57175, 57275, 57375, 57475, 57575, 57675, 57775, 57875, 57975, 58085, 58185, 58285, 58385, 58485, 58585, 58685, 58785, 58885, 58985, 59095, 59195, 59295, 59395, 59495, 59595, 59695, 59795, 59895, 59995, 60006, 60106, 60206, 60306, 60406, 60506, 60606, 60706, 60806, 60906, 61016, 61116, 61216, 61316, 61416, 61516, 61616, 61716, 61816, 61916, 62026, 62126, 62226, 62326, 62426, 62526, 62626, 62726, 62826, 62926, 63036, 63136, 63236, 63336, 63436, 63536, 63636, 63736, 63836, 63936, 64046, 64146, 64246, 64346, 64446, 64546, 64646, 64746, 64846, 64946, 65056, 65156, 65256, 65356, 65456, 65556, 65656, 65756, 65856, 65956, 66066, 66166, 66266, 66366, 66466, 66566, 66666, 66766, 66866, 66966, 67076, 67176, 67276, 67376, 67476, 67576, 67676, 67776, 67876, 67976, 68086, 68186, 68286, 68386, 68486, 68586, 68686, 68786, 68886, 68986, 69096, 69196, 69296, 69396, 69496, 69596, 69696, 69796, 69896, 69996, 70007, 70107, 70207, 70307, 70407, 70507, 70607, 70707, 70807, 70907, 71017, 71117, 71217, 71317, 71417, 71517, 71617, 71717, 71817, 71917, 72027, 72127, 72227, 72327, 72427, 72527, 72627, 72727, 72827, 72927, 73037, 73137, 73237, 73337, 73437, 73537, 73637, 73737, 73837, 73937, 74047, 74147, 74247, 74347, 74447, 74547, 74647, 74747, 74847, 74947, 75057, 75157, 75257, 75357, 75457, 75557, 75657, 75757, 75857, 75957, 76067, 76167, 76267, 76367, 76467, 76567, 76667, 76767, 76867, 76967, 77077, 77177, 77277, 77377, 77477, 77577, 77677, 77777, 77877, 77977, 78087, 78187, 78287, 78387, 78487, 78587, 78687, 78787, 78887, 78987, 79097, 79197, 79297, 79397, 79497, 79597, 79697, 79797, 79897, 79997, 80008, 80108, 80208, 80308, 80408, 80508, 80608, 80708, 80808, 80908, 81018, 81118, 81218, 81318, 81418, 81518, 81618, 81718, 81818, 81918, 82028, 82128, 82228, 82328, 82428, 82528, 82628, 82728, 82828, 82928, 83038, 83138, 83238, 83338, 83438, 83538, 83638, 83738, 83838, 83938, 84048, 84148, 84248, 84348, 84448, 84548, 84648, 84748, 84848, 84948, 85058, 85158, 85258, 85358, 85458, 85558, 85658, 85758, 85858, 85958, 86068, 86168, 86268, 86368, 86468, 86568, 86668, 86768, 86868, 86968, 87078, 87178, 87278, 87378, 87478, 87578, 87678, 87778, 87878, 87978, 88088, 88188, 88288, 88388, 88488, 88588, 88688, 88788, 88888, 88988, 89098, 89198, 89298, 89398, 89498, 89598, 89698, 89798, 89898, 89998, 90009, 90109, 90209, 90309, 90409, 90509, 90609, 90709, 90809, 90909, 91019, 91119, 91219, 91319, 91419, 91519, 91619, 91719, 91819, 91919, 92029, 92129, 92229, 92329, 92429, 92529, 92629, 92729, 92829, 92929, 93039, 93139, 93239, 93339, 93439, 93539, 93639, 93739, 93839, 93939, 94049, 94149, 94249, 94349, 94449, 94549, 94649, 94749, 94849, 94949, 95059, 95159, 95259, 95359, 95459, 95559, 95659, 95759, 95859, 95959, 96069, 96169, 96269, 96369, 96469, 96569, 96669, 96769, 96869, 96969, 97079, 97179, 97279, 97379, 97479, 97579, 97679, 97779, 97879, 97979, 98089, 98189, 98289, 98389, 98489, 98589, 98689, 98789, 98889, 98989, 99099, 99199, 99299, 99399, 99499, 99599, 99699, 99799, 99899, 99999]
0
 Аватар для vdm_mar
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
25.03.2016, 18:21
Не все так просто. n - это номер (член) палиндрома в последовательности палиндромов, а не массива чисел, в которых ищется палидром. То есть (10 ^ 5)-ый палидром будет искаться среди ого-го какого массива чисел.

Что заметил, в последовательности палиндромов идут повторы, которые можно засистематизировать:
1 2 3 4 5 6 7 8 9

11 22 33 44 55 66 77 88 99

101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 303 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494 505 515 525 535 545 555 565 575 585 595 606 616 626 636 646 656 666 676 686 696 707 717 727 737 747 757 767 777 787 797 808 818 828 838 848 858 868 878 888 898 909 919 929 939 949 959 969 979 989 999

1001 1111 1221 1331 1441 1551 1661 1771 1881 1991 2002 2112 2222 2332 2442 2552 2662 2772 2882 2992 3003 3113 3223 3333 3443 3553 3663 3773 3883 3993 4004 4114 4224 4334 4444 4554 4664 4774 4884 4994 5005 5115 5225 ... (сократил, а то дофига)

Суммы членов последовательности будут зависеть от четности/нечетности длин палиндрома и будут выглядеть так

9 * (10 * 0)(нечет)
9 * (10 * 0) +9 * (10 * 0) (чет)
9 * (10 * 0) +9 * (10 * 0) + 9 * (10 * 1) (нечет)
9 * (10 * 0) +9 * (10 * 0) + 9 * (10 * 1) + 9 * (10 * 1) (чет)

То есть если нам задан какой-то член последовательности, мы можем найти границы его нахождения в суммах, найти длину палиндрома, а потом заполнить места цифр палиндрома с помощью вычисления длин от наименьшего передела. Только нужно учитывать, что "граничные" значения находятся в range(1, 10).

Python
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# это часть, где находится длина (length) палиндрома, нижняя граница отсчета (lowerLimit)
#  максимальный показатель степени для 10 (exponentTen)
 
def control():
    if highLimit > n:
        return False
    else:
        return True
 
n = int(input('Введите n:\n'))
lowerLimit = 0
highLimit = 0
length = 1
exponentTen = 0
z = True
while True:
    limit = 9 * (10 ** exponentTen)
    highLimit += limit
    if control() == False: break
    lowerLimit = highLimit
    length += 1
    highLimit += limit
    if control() == False: break
    lowerLimit = highLimit
    length += 1
    exponentTen += 1
    
#здесь заполняются числа палиднрома, для быстроты не полный палидром, а для четных 
# только половина, для нечетных половина и еще одна цифра, все рано "симметричны"
 
difference = n - lowerLimit
n = 0
baseDigit = 0
while exponentTen + 1:
    digit1 = difference // (10 ** exponentTen)
    if n == 0 and length > 1:
        baseDigit += (digit1 + 1) * (10 ** exponentTen)
    elif exponentTen == 0 and length > 1:
        baseDigit += digit1 - 1
    else:
        baseDigit += digit1 * (10 ** exponentTen)
    digit2 = difference % (10 ** exponentTen)
    difference = digit2
    exponentTen -= 1
    n += 1
 
#здесь из "половинок" восстанавливаем палиндром
 
if length%2 == 0:
    answerDigit = str(baseDigit) + str(baseDigit)[::-1]
else:
    answerDigit = str(baseDigit) + str(baseDigit)[-2::-1]
 
print(answerDigit)
Добавлено через 44 минуты
Сорри, тут степени должны были быть
9 * (10 ** 0)(нечет)
9 * (10 ** 0) +9 * (10 ** 0) (чет)
9 * (10 ** 0) +9 * (10 ** 0) + 9 * (10 ** 1) (нечет)
9 * (10 ** 0) +9 * (10 ** 0) + 9 * (10 ** 1) + 9 * (10 ** 1) (чет)

Добавлено через 42 минуты
строка 5 правильно так:

if highLimit >= n:
1
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
25.03.2016, 21:03
vdm_mar, а зачем вам эта функция?
Python
1
if highLimit >= n: break
0
 Аватар для vdm_mar
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
25.03.2016, 21:10
А, понял, можно было без функции. Я сейчас по Лутцу функции учу, леплю их куда возможно.
0
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
25.03.2016, 23:54
Лучший ответ Сообщение было отмечено Michael96 как решение

Решение

В общем оказалось что палиндром в некоторой степени зависит от своей позиции, и используя эту закономерность у меня получился вот такой код
Python
1
2
3
4
5
num = int(input('> ')) + 1
exp = len('%.0f' % (num - 10**(len(str(num)) - 2))) - 1
num -= 10**exp 
x = -1 if num >= 10**exp or num == 0 else None
print(str(num)[:x] + str(num)[::-1])
Делал уже полусонный, может кто-то еще лучше способ придумает на основе этого
dondublon, если я напишу число 99998, какой палиндром он мне выдаст?
Соглашусь с vdm_mar, там все же нужен массив из 10**5 палиндромов, а не всех подряд чисел, а в вашем варианте их всего 1100
1
 Аватар для vdm_mar
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
26.03.2016, 00:05
Whost, гений!
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 10
26.03.2016, 00:21  [ТС]
Спасибо!
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
28.03.2016, 07:53
Цитата Сообщение от vdm_mar Посмотреть сообщение
Не все так просто. n - это номер (член) палиндрома в последовательности палиндромов, а не массива чисел, в которых ищется палидром. То есть (10 ^ 5)-ый палидром будет искаться среди ого-го какого массива чисел.
Ой госспади, тоже мне проблема Просто увеличьте последовательность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2016, 07:53
Помогаю со студенческими работами здесь

Как сделать? Числа-палиндромы
Добрый день! Прохожу курс по python. Решил поупражняться. Пока все ок. Вот только затормозил на этих задачах. Никакие не даются. Есть...

Палиндромы
Задача: Даны два четырёхзначных числа A и B. Выведите все четырёхзначные числа на отрезке от A до B, запись которых является палиндромом. ...

Палиндромы ЯЛ
Палиндро́м (от др.-греч. πάλιν — «назад, снова» и др.-греч. δρóμος — «бег, движение») — число, буквосочетание, слово или текст, одинаково...

Задача палиндромы
Дана строка s. Вы можете менять местами символы любое количество раз. Например, если s = "aebecda", вы можете, например,...

Удалить палиндромы из списка слов
Напишите функцию main(s), где s - список обычных слов или фраз, разделенных пробелами, смешанных с палиндромами (тоже могут быть фразами)....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru