回文自拍数

2023年 9月 9日 16.3k 0

回文自拍数

如果一个数字可以仅使用其自己的数字和某些数学运算来表示,则该数字被视为“自拍数字”。

例如,936是一个自拍号码。

$$mathrm{936:=:(sqrt{9})!^{3}:+:6!:=:216:+:720:=:第936章

这里可以看到,对原数的数字进行了一系列运算,结果与原数相等。

回文自拍号码是一种特殊的自拍号码。他们满足自拍乘法规则。

  • 考虑一个数字 x。

  • 设 x 的数字反转后的数为 $mathrm{x^prime}$。

  • 令 y 为由 x 的数字以不同顺序组成的数字。

  • 设 y 的数字反转后的数为 $mathrm{y^prime}$。

回文自拍数满足以下方程 -

$$mathrm{x:×:x^prime:=:y:×:y^prime}$$

问题陈述

对于给定的数字x,根据自拍乘法规则求其回文自拍数。

示例

Input: 1224
Output: 2142

登录后复制

说明 -

给定 x = 1224

所以 $mathrm{x^prime}$ = 4221 是将 x 的数字反转得到

令 y = 2142。y 是使用 x 的数字以不同顺序形成的

所以 $mathrm{y^prime}$ = 2412 是将 y 的数字反转得到的

$mathrm{x:×:x^prime}$ = 1224 × 4221 = 5166504 和 $mathrm{y:×:y^prime}$ = 2142 × 2412 = 5166504 p>

Sincex× x' = y × y',y为x的回文自拍数。

Input 4669:
Output: 6496

登录后复制

说明 -

给定 x = 4669

所以 $mathrm{x^prime}$ = 9664 是将 x 的数字反转得到

令 y = 6496。y 是使用 x 的数字以不同顺序形成的

所以 $mathrm{y^prime}$ = 6946 是将 y 的数字反转得到的

$mathrm{x:×:x^prime}$ = 4669 × 9664 = 45121216 和 $mathrm{y:×:y^prime}$ = 6496× 6946= 45121216 p>

由于 x× x' = y × y',y 是 x 的回文自拍数。

Input: 456
Output: No palindromic selfie number exists

登录后复制

说明 -

给定 x = 456

所以 $mathrm{x^prime}$ = 654 是通过将 x 的数字反转得到的

令 y = 546。y 是使用 x 的数字以不同顺序形成的

所以 $mathrm{y^prime}$ = 645 是通过将 y 的数字反转得到的

$mathrm{x:×:x^prime}$ = 456 × 654 = 298224 和 $mathrm{y:×:y^prime}$ = 546× 645= 352170 p>

由于 $mathrm{x:×:x^prime}$ ≠ $mathrm{y:×:y^prime}$,因此 y 不是 x 的回文自拍照数。 p>

没有其他 456 的排列也满足自拍乘法规则。

解决方案

查找给定数字的回文自拍照数字的解决方法相当直观且易于理解。

该方法包括以下步骤 -

  • 定义一个“反向”函数

    • 接受一个整数作为输入

    • 将其转换为字符串

    • 反转字符串

    • 将其转换回整数。

  • 定义一个函数“Swap”

    • 采用整数 i 和 j 作为输入

    • 将整数转换为字符串

    • 交换字符串中的第 i 个和第 j 个字符

    • 将字符串转换回整数。

  • 定义一个函数“置换”

    • 采用整数、l、r 和一组“排列”作为输入。

    • 它递归地生成整数数字的所有可能排列

    • 它将它们存储在“排列”集中。

  • 定义一个函数“palindromic_selfie”

    • 采用整数“num”和一组“permutations”作为输入。

    • 它使用“permute”函数生成整数“num”的所有可能的排列

    • 然后,它通过将数字及其逆序的乘积与排列及其逆序的乘积进行比较,检查这些排列中的任何一个是否满足回文自拍属性。

    • 如果找到这样的排列,则返回该数字。否则,返回-1。

  • 在主函数中,设置一个数字“n”和一个用于存储排列的空集。

  • 使用“n”和空集调用“palindromic_selfie”函数,并存储返回结果。

  • 如果返回结果为-1,则打印“不存在回文自拍数”。否则,打印返回结果。

示例:C++ 程序

以下 C++ 程序查找给定整数的回文自拍编号(如果存在)并返回它。它通过使用 permute() 函数找到给定数字的所有可能的排列,然后使用 reverse() 函数确定给定数字和该数字的任何排列是否满足 palindrome_selfie() 函数中的自拍乘法规则来实现此目的。如果不存在这样的数字,则会打印“No Palindrome Selfie Number Exists”。

#include
using namespace std;

// Function to reverse the digits of a number
int reverse(int num){

// converting number to string
string str = to_string(num);
reverse(str.begin(), str.end());

// converting string to integer
num = stoi(str);
return num;
}

// Function that Swaps the digits i and j in the num
int Swap(int num, int i, int j){
char temp;

// converting number to string
string s = to_string(num);

// Swap the ith and jth character
temp = s[i];
s[i] = s[j];
s[j] = temp;

// Convert the string back to int and return
return stoi(s);
}

// Function to get all possible permutations of the digits in num
void permute(int num, int l, int r, set &permutations){

// Adds the new permutation obtained in the set
if (l == r)
permutations.insert(num);
else{
for (int i = l; i

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论