回文自拍数

回文自拍数

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

例如,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: 1224Output: 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: 456Output: 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 numberint 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 numint 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 numvoid 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 & permutations) {      // Length of the number required for calculating all permutations of the digits   int l = to_string(num).length() - 1;   permute(num, 0, l, permutations); // Calculate all permutations      //Remove the number and its reverse from the obtained set as this is the LHS of multiplicative equation   auto n1 = permutations.find(reverse(num));   auto n2 = permutations.find(num);   if (n1 != permutations.end())      permutations.erase(n1);   if (n2 != permutations.end())      permutations.erase(n2);      // Go through all other permutations of the number   for (set::iterator it = permutations.begin(); it != permutations.end(); it++) {      int num2 = *it;            // Check if selfie multiplicative rule holds i.e. x * reverse(x) = y * reverse(y)      if (num * reverse(num) == num2 * reverse(num2)) {         return num2;      }   }      // If no such number found   return -1;}int main(){   int n = 1234;   cout  permutations;   int ans = palindromic_selfie(n, permutations);   if (ans == -1) {      cout 

输出

n: 1234No Palindromic Selfie Number Exists

登录后复制

时间和空间复杂度分析

时间复杂度:O(n!)

此代码的时间复杂度为 O(n!),其中 n 是输入数字的位数。这是因为有 n! n 位数字的排列,并且 permute() 方法生成数字的所有潜在排列。

空间复杂度:O(n!)

由于集合“排列”包含所有可能的数字组合,等于 n!,因此该代码的空间复杂度为 O(n!)。 verse() 和 Swap() 函数的空间复杂度为 O(n),因为它们还生成长度为 n 的临时字符串。空间复杂度为 O(n!) 的排列集合主导了整个代码的空间复杂度。

结论

回文自拍数是数学中一个有趣的概念。它们满足自拍乘法方程。本文讨论了一种方法来查找一个数字是否具有回文自拍号码,如果是,则返回它。对问题的概念、解决方法、C++程序以及程序的时间和空间复杂度进行了深入分析。

以上就是回文自拍数的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2582649.html

(0)
上一篇 2025年3月6日 14:21:57
下一篇 2025年2月26日 16:04:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在C++中的合并排序树

    We are given an integer array, a set of segment start and end pointers and a key value and the problem statement here is…

    2025年3月6日
    200
  • 给定一个数,其与原始数之和等于另一个给定的数的排列方式

    在本文中,我们将深入探讨一个涉及数字和排列的迷人问题:“一个数与原始数的和等于另一个给定数的排列”。这个问题将数论和组合数学独特地结合在一起,使它成为一个引人入胜的挑战。 为了澄清,给定一个原始数和一个目标数,我们需要找到原始数的一个排列,…

    2025年3月6日
    200
  • 在给定的数组中找到最后一个回文字符串

    在这个问题中,我们需要找到数组中的最后一个回文字符串。如果任何字符串在读取时相同,无论是从头开始读取还是从末尾开始读取,都可以说该字符串是回文。我们可以比较起始字符和结束字符来检查特定字符串是否是回文。查找回文字符串的另一种方法是将字符串反…

    2025年3月6日
    200
  • 回文子字符串查询在C++中

    在本教程中,我们需要解决给定字符串的回文子串查询。解决回文子串查询比解决 C++ 中的常规查询复杂得多。它需要更复杂的代码和逻辑。 在本教程中,我们提供了字符串 str 和 Q 个子字符串 [L…R] 查询,每个查询都有两个值 …

    2025年3月6日
    200
  • 递归在 C++ 数据结构中的妙用:栈和树的实现

    递归在 c++++ 数据结构中的应用:栈:通过后进先出 (lifo) 结构递归实现栈。树:通过分层结构递归实现树,支持插入和深度计算等操作。递归为处理嵌套结构提供了简洁高效的解决方案,使数据结构的实现更加直观和易于维护。 递归在 C++ 数…

    2025年3月6日
    200
  • php初学者看什么书?

    如果你学过其他的语言,你会发现php其实还算简单的。有人说php学习适合看手册,但是依然有很多的经典书可以帮助大家入门和提高。以下4本你就可以好好读读。 1、《细说PHP》 PHP入门的经典,内容详实易懂,全面涵盖了web开发的所需的知识内…

    2025年3月5日 编程技术
    200
  • 2025年全球最靠谱的数字货币交易所排名top10推荐

    本文对比分析了OKX、Gate.io、Binance、Coinbase、Gemini、Kraken、KuCoin、Bybit和Crypto.com九大主流加密货币交易所。文章从关键数据、核心优势和潜在不足三个维度,对各平台的交易对数量、杠杆…

    2025年3月4日 区块链
    400
  • 币安binance官网登录入口网页版在线

    币安(Binance)是全球领先的加密货币交易平台,成立于2017年,总部位于马耳他。凭借其高速交易、全球覆盖和丰富的生态系统,币安迅速崛起,曾创下日交易额高达760亿美元的记录。平台提供现货、期权、合约等多种交易产品,涵盖150多种加密货…

    2025年3月4日
    400
  • 7.19mm机身塞进6500mAh电池 vivo S20发布:2299元起

    vivo s20震撼发布,超长续航轻薄机身惊艳登场!11月28日,vivo s20正式亮相,以其纤薄机身和超大电池容量,成为手机市场的新焦点。 价格方面,8GB+256GB版本售价2299元,12GB+256GB版本售价2599元,12GB…

    2025年3月3日 互联网
    200
  • iOS 18.3 beta3测评

    苹果 ios 18.3 beta 3 近日发布,引起了广泛关注。本篇测评将带大家深入了解 ios 18.3 beta 3 的主要更新和改进,包括全新的功能、问题修复和性能优化。随着苹果不断迭代 ios 18 系统,ios 18.3 beta…

    2025年3月3日 互联网
    200

发表回复

登录后才能评论