目录
问题陈述
示例
解决方案
示例:C++ 程序
输出
时间和空间复杂度分析
时间复杂度:O(n!)
空间复杂度:O(n!)
结论
首页 后端开发 C++ 回文自拍数

回文自拍数

Sep 09, 2023 pm 08:37 PM
自拍 回文 数字

回文自拍数

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

例如,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

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

由于 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

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

没有其他 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 <bits/stdc++.h>
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<int> &permutations){
   
   // Adds the new permutation obtained in the set
   if (l == r)
      permutations.insert(num);
   else{
      for (int i = l; i <= r; i++){
         
         // Swap digits to get a different ordering
         int num_copy = Swap(num, l, i);
         
         // Recurse to next pair of digits
         permute(num_copy, l + 1, r, permutations);
      }
   }
}

// Function to check for palindrome selfie number
int palindromic_selfie(int num, set<int>& 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<int>::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 << "n: " << n << endl;
   set<int> permutations;
   int ans = palindromic_selfie(n, permutations);
   if (ans == -1) {
      cout << "No Palindromic Selfie Number Exists" << endl;
   }
   else{
      cout << ans << endl;
   }
   return 0;
}
登录后复制

输出

n: 1234
No 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++程序以及程序的时间和空间复杂度进行了深入分析。

以上是回文自拍数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
微信自拍表情可以删除吗 微信自拍表情可以删除吗 Feb 27, 2024 pm 09:34 PM

在微信与好友聊天时,我们不仅使用文字,还经常借助各种表情包来更好地表达情感。其中,微信的自拍表情是很多人在聊天过程中喜欢使用的一种表达方式。但有时,我们可能不小心添加了一些不合适的自拍表情,这时就需要将其删除。那么究竟该如何删除呢,这篇教程攻略就将为大家带来详细介绍,不了解的小伙伴们快来跟着本文一起一探究竟吧。微信自拍表情怎么删除掉?1、首先需要打开微信,在表情商店界面点击进入设置图标。2、然后需要在我的表情界面点击我的自拍表情。3、接着点击进入我的自拍表情,选择整理功能。4、最后勾选需要删除的

全球数字虚拟币交易平台排行榜前十(2025权威排名) 全球数字虚拟币交易平台排行榜前十(2025权威排名) Mar 06, 2025 pm 04:36 PM

2025年全球数字虚拟币交易平台竞争激烈,本文根据交易量、安全性、用户体验等指标,权威发布2025年全球十大数字虚拟币交易平台排行榜。OKX凭借强大的技术实力和全球化运营策略居首,Binance以高流动性和低费用紧随其后。Gate.io、Coinbase、Kraken等平台凭借各自优势稳居前列。榜单涵盖Huobi、KuCoin、Bitfinex、Crypto.com和Gemini等交易平台,各有特色,但投资需谨慎。选择平台需考虑安全性、流动性、费用、用户体验、币种选择及监管合规性等因素,理性投资

C程序用于找到一个数的最大质因子 C程序用于找到一个数的最大质因子 Aug 27, 2023 am 10:09 AM

质因数 - 在数论中,正整数的质因数是精确整除该整数的质数。找到这些数字的过程称为整数分解或质因数分解。示例 - 288 的质因数是:288=2x2x2x2x2

币圈十大交易所2025年最新 数字货币app排行榜前十 币圈十大交易所2025年最新 数字货币app排行榜前十 Feb 27, 2025 pm 06:33 PM

虚拟货币十大交易平台排行榜(2025年最新): 币安:全球龙头,高流动性,监管受关注。 OKX:庞大用户基数,支持多种币种,提供杠杆交易。 Gate.io:资深交易所,多种法币支付方式,提供多种交易对和投资产品。 Bitget:衍生品交易所,高流动性,低费用。 火币:老牌交易所,支持多种币种和交易对。 Coinbase:美国知名交易所,受监管严格。 Phemex等等。

回文子字符串查询在C++中 回文子字符串查询在C++中 Sep 22, 2023 am 09:05 AM

在本教程中,我们需要解决给定字符串的回文子串查询。解决回文子串查询比解决C++中的常规查询复杂得多。它需要更复杂的代码和逻辑。在本教程中,我们提供了字符串str和Q个子字符串[L...R]查询,每个查询都有两个值L和R。我们的目标编写一个程序来解决查询以确定substring[L...R]是否是回文。我们必须确定在L到R范围内形成的子串是否是回文来解决每个查询。例如-Let'sinput"abbbabaaaba"asourinputstring.Thequer

十大数字货币交易平台 数字货币交易平台top10榜单最新 十大数字货币交易平台 数字货币交易平台top10榜单最新 Mar 17, 2025 pm 05:57 PM

十大数字货币交易平台:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,这些交易所各具特色,用户可根据安全性、费用、币种选择、用户界面和客户支持等因素选择适合自己的平台。

数字货币app十大交易平台 炒币正规平台app推荐 数字货币app十大交易平台 炒币正规平台app推荐 Mar 07, 2025 pm 06:51 PM

本文推荐十个数字货币交易App:1. OKX;2. Binance;3. Gate.io;4. Huobi Global;5. Kraken;6. Coinbase;7. KuCoin;8. Crypto.com;9. Bitfinex;10. Poloniex。选择平台需考虑安全性、流动性、交易费用、币种选择、用户界面、客服支持及法规合规性等因素,谨慎评估风险,切勿盲目跟风。

潮自拍如何将音量键设置成拍照呢 苹果手机快速调节音量键拍照的方法 潮自拍如何将音量键设置成拍照呢 苹果手机快速调节音量键拍照的方法 Mar 12, 2024 pm 02:28 PM

  潮自拍如何将音量键设置成拍照呢?这款软件的好用,便捷我相信小伙伴们都是有目共睹的,我们在拍照的过程中,是不是要经常点击软件页面中的按键呢,是不是很不方便我们进行操作呢?那我们应该如何去调节软件中的按键成为声音键呢?有没有快捷的操作方法呢?下面就是小编所带来的苹果手机如何设置音量键拍照的方法。希望对你们有所帮助哦。潮自拍苹果手机快速调节音量键拍照的方法  1.在苹果手机主屏幕,点击设置图标。  2.在设置界面,点击这里的相机选项。  3在相机设置界面,将这里的使用调高音量键连拍功能开启,这样在

See all articles