Число-паліндром#1608

Число-паліндром (Розбір)

Прочитаємо вхідне число як рядок в символьний масив . Нехай — довжина рядка , зменшена на (індекс останнього символу масиву). Рядок є паліндромом, якщо для всіх 0 \le i \le len / 2 виконується умова s[i] = s[len - i].

Розглянемо, наприклад, число довжини . Тоді len = 7 - 1 = 6. Мають місце такі рівності:

Реалізація алгоритму

Вхідне число зберігаємо в символьному масиві .

char s[50];

Читаємо вхідне число як рядок. Встановлюємо рівним індексу останньої цифри.

gets(s);
len = strlen(s) - 1;

Ініціалізуємо flag = 0, що означає, що число є паліндромом.

flag = 0;

Якщо для деякого порушується рівність s[i] = s[len - i], то число не є паліндромом, і встановлюємо flag = 1.

for(i = 0; i <= len / 2; i++)
  if (s[i] != s[len - i]) flag = 1;

Залежно від значення змінної виводимо результат.

if (flag == 0) printf("Yes\n"); else printf("No\n");

Реалізація алгоритму — функція IsPalindrome

Вхідне число зберігаємо в символьному масиві .

char s[50];

Функція IsPalindrome перевіряє, чи є рядок паліндромом.

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;
}

Основна частина програми. Читаємо вхідне число як рядок.

gets(s);

Перевіряємо, чи є рядок паліндромом.

flag = IsPalindrome(s);

Залежно від значення змінної виводимо результат.

if (flag == 1) printf("Yes\n"); else printf("No\n");

Реалізація алгоритму — STL reverse

Читаємо вхідне число як рядок .

cin >> p;

Обертаємо рядок : = reverse(p).

q = p; reverse(q.begin(),q.end());

Якщо рядки і однакові, то вхідний рядок є паліндромом.

if (p == q) printf("Yes\n"); else printf("No\n");

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()

Реверс рядка можна отримати за допомогою зрізу: a[::-1]. Перевіряємо, чи співпадає рядок зі своїм реверсом. Залежно від результату виводимо відповідь.

if a == a[::-1]: 
  print("Yes")
else: 
  print("No")