当前位置: 首页 > news >正文

习题5.6 “数学黑洞“

"数学黑洞":任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,会发现一个神秘的数。

//************************************************
//* Source Name: ChapterFive_ExerciseSix.cpp
//* Founction  : Mathematical black holes
//* Author	   : Skyera
//* Create Time	   : 2025-7-25
//* Modify	   : 
//* Modify Time:
//************************************************
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
// 将数字分解为单个数字
vector<int> getDigits(int num)
{vector<int> digits;// 处理特殊情况:如果是0,确保有4个0if(num == 0){for(int i = 0; i < 4; i++){digits.push_back(0);}return digits;}// 提取每个位的数字while(num > 0){digits.push_back(num % 10);num /= 10;}// 确保有4个数字(补0)while(digits.size() < 4){digits.push_back(0);}return digits;
}// 计算下一步的数字
int nextNumber(int num)
{vector<int> digits = getDigits(num);// 排序得到最大数和最小数sort(digits.rbegin(), digits.rend()); // 降序排列int maxNum = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];sort(digits.begin(), digits.end());int minNum = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];// 输出当前步骤信息cout << setw(4) << setfill('0') << maxNum << '-'<< setw(4) << setfill('0') << minNum << '='<< maxNum - minNum << endl;return maxNum - minNum;
}// 输出当前步骤信息
void findBlackHole(int num)
{// 检查是否为4位数字if(num < 1000 || num > 9999){cout << "请输入一个4位自然数!" << endl;return; }// 检查是否所有数字都相同(如1111)vector<int> digits = getDigits(num);bool allSame = true;for(int i = 0; i < 4; i++){if(digits[i] != digits[0]){allSame = false;break;}}if(allSame){cout << "输入的数字各位都相同,结果将是0!" << endl;return;}cout << "计算过程:" << endl;int current = num;int steps = 0;// 循环计算直到得到6174while(current != 6174){current = nextNumber(current);steps++;// 防止意外的无限循环if(steps > 100){cout << "超过最大计算步骤,可能出现异常" << endl;return;}}cout << "经过" << steps << "步,得到数学黑洞" << current << endl;
}
int main()
{int num;cout << "请输入一个自然数(各位数字不能相同):";cin >> num;findBlackHole(num);return 0;
}

http://www.dtcms.com/a/298661.html

相关文章:

  • Java研学-RabbitMQ(二)
  • 亚德诺半导体AD8612ARUZ-REEL双通道精密运算放大器,0.5μV超低失调电压+0.02μV/°C温漂!
  • 老龄化浪潮下的破局者:智慧养老重塑银发经济格局
  • ptmalloc(glibc-2.12.1)源码解析2
  • 深入理解 UDP 协议:从原理到实战的技术解析
  • 开源语音TTS与ASR大模型选型指南(2025最新版)(疯聊AI提供)
  • Paimon主键表的合并机制
  • 模糊综合评估法简单示例
  • MySQL的认识与基本操作
  • NaVILA源码解析——从其VLA部分到其low-level部分:涵盖legged-loco、rsl_rl
  • AMD推出Radeon AI Pro R9700:32GB显存加持,发力AI推理与专业图形双场景
  • 13.使用C连接mysql
  • ro属性和persist属性的区别
  • 什么是游戏盾(高防版)?
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-24,(知识点:二极管基础知识,单向导电性)
  • Redux 入门超详细指南
  • vue3中pinia详解
  • 关于“前导零”的问题记录,也就是(0.1)和.1这种数据处理问题
  • streamyfin(世博会)android 编译
  • 0人工沟通,它如何用AI撬动海外B端9400亿采购市场?
  • Round-Robin仲裁器
  • <HMI><威纶通><触摸屏>基于威纶通MT8106iQ触摸屏,实现自定义登录窗口(优化)
  • 内核驱动相关知识点
  • 【Agent】Common Ground 团队协作模型:Partner、Principal 与 Associate
  • 数据结构自学Day14 -- 归并排序
  • 正则表达式 \b:单词边界
  • 模拟flink处理无限数据流
  • WAIC2025预告|英码深元AI一体机将亮相华为昇腾展区,以灵活部署的能力赋能行业智能化转型
  • 学习:JS[6]环境对象+回调函数+事件流+事件委托+其他事件+元素尺寸位置
  • ReVQ (Quantize-then-Rectify,量化后修正)