Условие задачи: «Назовем число палиндромом, если оно не меняется при перестановке его цифр в обратном порядке. Напишите программу, которая по заданному числу K выводит количество натуральных палиндромов, не превосходящих K.» Вот как выглядит моё решение:
K = int(input()) countNumber = 0 a = 0 flip = 0 Number = 0 countFlip = 0 while countNumber 0: a = Number % 10 Number = Number // 10 flip = flip * 10 + a if countNumber == flip: countFlip += 1 print(countFlip)
- Вводятся числа K, счетчик, который завершит работу цикла; переменные a, Number и flip для «переворота» числа; и счетчик countFlip для подсчета палиндромов.
- счетчик countNumber будет увеличиваться до тех пор, пока не будет равен K;
- каждое увеличение счетчика будет приравниваться переменной Number для вычисления самого «перевёртыша» во вложенном цикле.
- В случае, если «перевёртыш» является палиндромом, cчетчик countFlip увеличивается.
При запуске программы, что бы я не вводил, программа выдаёт «1». Почему?
Разбор задачи 9 leetcode.com Palindrome Number. Решение на C++
Заранее благодарю за помощь!
Источник: ru.stackoverflow.com
В промежутке [m, n] найти все палиндромы и подсчитать их количество. — Pascal ABC
В промежутке [m, n] найти все палиндромы и подсчитать их количество.
Код к задаче: «В промежутке [m, n] найти все палиндромы и подсчитать их количество.»
Листинг программы
program z1; function IsPalindrom(const i: Integer): Boolean; var t, k, d: Integer; begin Result := False; k := i; t := 0; while k <> 0 do begin d := k mod 10; k := k div 10; t := t * 10 + d; end; if t = i then Result := True; end; var i, f, t, l: Integer; begin Write(‘Введите диапазон значений через пробел: ‘); ReadLn(f, t); l := 0; for i := f to t do begin if IsPalindrom(i) then begin Inc(l); //WriteLn(i); end; end; WriteLn(‘В промежутке ‘, f, ‘ — ‘, t, ‘ найдено палиндромных чисел: ‘, l); end.
Источник: studassistent.ru
Алгоритм
n — для границы значений натуральных чисел, m — для числа, с которым сравнивается квадрат суммы цифр (точный квадрат), k — для натуральных чисел от 1 до n, a — для запоминания натурального числа, перед тем, как будет определяться сумма его цифр, p — для цифр числа, s — для суммы цифр.
2. Раздел операторов.
Ввод значений n и m. Установить первоначальное значение для k (эта переменная «перебирает» все натуральные числа от 1 до n, k := 1).
Цикл, пока k
LeetCode #9 — Palindrome Number
В цикле: установить первоначальные значения для суммы s (s:=0); запомнить число в переменную a (a := k).
Цикл для подсчета суммы цифр, пока k <> 0.
В цикле: выделять по одной цифре числа, известным способом; прибавлять по одной цифре к сумме; уменьшать число на последнюю цифру и на порядок.
Закончить цикл для подсчета суммы цифр.
Проверка выполнения условия.
Если квадрат суммы цифр равен заданному числу,
тогда вывести это натуральное число на экран.
Перейти к проверке следующего числа.
Закончить основной цикл проверки чисел.
3. Закончить программу.
По этому алгоритму составим программу.
n, m, k, a, p, s : integer;
write(‘Введите натуральное число, до которого ‘);
write(‘выводить искомые числа ‘); readln(n);
writeln(‘Введите число, с которым сравниваете квадрат’);
write(‘его суммы цифр. Оно должно быть точн. квадрат. ‘); readln(m);
if sqr(s) = m then write(a, ‘ ‘);
Пример 10. Найти наименьшее натуральное число, дающее при делении на 2, 3, 4, 5, 6 соответственно остатки 1, 2, 3, 4, 5.
Задачу будем решать так: берется наименьшее натуральное число — единица и находятся остатки от деления его на 2, 3, 4, 5 и 6; если остатки будут равны 1, 2, 3, 4 и 5, тогда это число является искомым, его надо выдать на экран и закончить программу, в противном случае, надо брать следующее натуральное число — 2 и проверять его, и так далее.
Программа, составленная по этой идее, очень проста:
until (n mod 2 = 1) and (n mod 3 = 2) and (n mod 4 = 3) and
(n mod 5 = 4) and (n mod 6 = 5);
writeln(‘Искомое целое число ‘, n)
Пример 11. Числа, одинаково читающиеся и слева направо, и справа налево, называются палиндромами. Например, числа 42324 или 1331 — палиндромы. Составьте программу, которая будет находить числа — палиндромы из заданного промежутка.
Логика составления программы такова.
Переставить цифры в числе и сравнить полученное число с заданным.
Раньше уже составлялась программа перестановки цифр числа, которая была выполнена с помощью цикла с предусловием
Как будет построена часть программы о перестановки цифр с помощью цикла
Пусть заданное число a, тогда введем еще одну переменную b, которой будет присвоено значение переменной a (для чего это делается вы узнаете позже): b := a;
Заведем еще одну переменную a1 для нового числа, в котором цифры уже будут переставлены.
Первоначальное значение этой переменной — ноль: a1 := 0;
Почему значение этой переменной равно нулю станет ясно из программы.
Далее организуем цикл repeat, в котором будет происходить перестановка цифр числа b:
a1 := a1*10 + b mod 10;
Итак, в цикле, также как и в цикле while . do . отделяется последняя цифра:
b mod 10; (например, 343 mod 10 = 3); переменной a1 присваивается значение:
a1 := a1*10 + b mod 10; 0 * 10 + 3 =3;
«отбрасывается» последняя цифра заданного числа с помощью операции целочисленного деления:
b := b div 10; 343 div 10 = 34;
проверяется условие: b = 0, 34 = 0, условие не выполняется, значит цикл продолжается.
Отделяется последняя цифра уже нового числа:
b mod 10 = 34 mod 10;
новое число a1, уже равное 3, умножается на 10 и к результату прибавляется следующая цифра — 4:
a1 := a1*10 + b mod 10;
«отбрасывается» последняя цифра числа b:
b := b div 10 ; 34 div 10 = 3;
проверяется условие: b = 0, 3 = 0; условие не выполняется, значит цикл продолжается.
Отделяется последняя цифра числа:
b mod 10 ; 3 mod 10 = 3;
формируется новое число:
a1 := a1*10 + b mod 10 ; 34 * 10 + 3 = 343;
«отбрасывается» последняя цифра числа и получается новое число:
b := b div 10 ; 3 div 10 = 0;
проверяется условие: b = 0, 0 = 0; условие выполняется, значит цикл заканчивается.
Теперь становится ясно, почему введена другая переменная b для заданного числа, ее значение в цикле меняется от начального до нуля и, чтобы сохранить заданное число в переменной a, и вводится, так сказать, «рабочая» переменная — b.
После окончания цикла перестановки цифр числа, сравнивается первоначальное число, которое «сохранилось» в переменной a и число, которое получилось после перестановки цифр и «накопилось» в переменной a1.
Если a = a1, тогда значение a выдается на экран, так как это число является палиндромом.
Далее, значение a увеличивается на 1, т. е. берется для рассмотрения следующее по порядку натуральное число и снова продолжается внешний цикл. Цифры числа переставляются, полученное новое число после перестановки цифр — a1, сравнивается с первоначальным a и так далее.
Внешний цикл заканчивается, когда значение a становится равным правой границе интервала — n.
Источник: studfile.net