Разбор
Анализ алгоритма
Прочитаем входное число как строку в символьный массив s
. Пусть len
– длина строки s
, уменьшенная на 1 (индекс ячейки символьного массива, в котором находится последняя цифра числа). Строка является палиндромом, если для всех .
Рассмотрим число 4570754 длины 7. Тогда len = 7 – 1 = 6
. Имеют место равенства:
s[0] = s[6 - 0] = s[6] = ‘4’;
s[1] = s[6 - 1] = s[5] = ‘5’;
s[2] = s[6 - 2] = s[4] = ‘7’;
Реализация алгоритма
Входное число читаем в символьный массив s.
char s[50];
Читаем входное число как строку. Устанавливаем len
равным индексу последней цифры.
gets(s); len = strlen(s) - 1; flag = 0;
Установим flag = 0
, означающее что число является палиндромом. Если равенство нарушается для некоторого i
, то число не палиндром, устанавливаем flag = 1
.
for(i = 0; i < len - i; i++) if (s[i] != s[len - i]) flag = 1;
В зависимости от значения flag
выводим результат.
if (flag == 0) printf("Yes\n"); else printf("No\n");
Реализация – функция IsPalindrome
#include <stdio.h> #include <string.h> char s[50]; int flag; int IsPalindrome(char *s) { int i = 0, j = strlen(s) - 1; while(i < j) { if (s[i] != s[j]) return 0; i++; j--; } return 1; } int main(void) { gets(s); flag = IsPalindrome(s); if (flag == 1) printf("Yes\n"); else printf("No\n"); return 0; }
Реализация – STL reverse
#include <cstdio> #include <iostream> #include <string> #include <algorithm> using namespace std; string p, q; int main(void) { cin >> p; q = p; reverse(q.begin(),q.end()); if (p == q) printf("Yes\n"); else printf("No\n"); return 0; }
Java реализация
import java.util.*; public class Main { public static void main(String[] args) { Scanner con = new Scanner(System.in); char[] s = con.nextLine().toCharArray(); int flag = 0, len = s.length - 1; for(int i = 0; i < len - i; i++) if (s[i] != s[len - i]) flag = 1; if (flag == 0) System.out.println("Yes"); else System.out.println("No"); con.close(); } }
Java реализация – функция IsPalindrome
import java.util.*; public class Main { public static int IsPalindrome(String s) { int i = 0, j = s.length() - 1; while(i < j) { if (s.charAt(i) != s.charAt(j)) return 0; i++; j--; } return 1; } public static void main(String[] args) { Scanner con = new Scanner(System.in); String s = con.next(); int flag = IsPalindrome(s); if (flag == 1) System.out.println("Yes"); else System.out.println("No"); con.close(); } }
Python реализация
a = input() if a == a[::-1]: print("Yes") else: print("No")