1019 数字黑洞 (20 分)(C++)

简介: 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

例如,我们从6767开始,将得到

1. 7766 - 6677 = 1089
2. 9810 - 0189 = 9621
3. 9621 - 1269 = 8352
4. 8532 - 2358 = 6174
5. 7641 - 1467 = 6174
6. ... ...

现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:

输入给出一个 (0,104) 区间内的正整数 N。

输出格式:

如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

输入样例 1:

6767

输出样例 1:

1. 7766 - 6677 = 1089
2. 9810 - 0189 = 9621
3. 9621 - 1269 = 8352
4. 8532 - 2358 = 6174

输入样例 2:

2222

输出样例 2:

2222 - 2222 = 0000

题目分析:

1.需要反转函数,取值函数,存数组函数

2.做出三大函数后,检查连贯性

我做了两次,测试点二错了:

e4cf0737411641a982412bc792506bc9.png


第一次代码如下:


#include <iostream>
#include <algorithm>
using namespace std;
void fan(int a[4], int b[4]) { //反转函数
  for (int i = 0, j = 3; i < 4; i++, j--) {
    a[i] = b[j];
  }
}
int getsorce(int x[4]) { //取值函数
  int t = 0;
  for (int i = 0; i < 4; i++) {
    t = t * 10 + x[i];
  }
  return t;
}
void in(int x[4], int n) { //存数组函数
  for (int i = 0; i < 4; i++) {
    x[i] = n % 10;
    n /= 10;
  }
}
int main() {
  int n;
  cin >> n;
  int arr[4], brr[4], a, b, c;
  in(brr, n);
  sort(brr, brr + 4);
  fan(arr, brr);
  a = getsorce(arr);
  b = getsorce(brr);
  if (a == b) {
    cout << a << " - " << b << " = 0000";
  } else {
    c = a - b;
    while (c != 6174) {
      printf("%04d - %04d = %4d\n", a, b, c);
      in(brr, c);
      sort(brr, brr + 4);
      fan(arr, brr);
      a = getsorce(arr);
      b = getsorce(brr);
      c = a - b;
    }
    printf("%04d - %04d = %d", a, b, c);
  }
}


改进后代码如下:


0484d3dc4636473b9a6b63d561e55b74.png

#include <iostream>
#include <algorithm>
using namespace std;
void fan(int a[4], int b[4]) { //反转函数
  for (int i = 0, j = 3; i < 4; i++, j--) {
    a[i] = b[j];
  }
}
int getsorce(int x[4]) { //取值函数
  int t = 0;
  for (int i = 0; i < 4; i++) {
    t = t * 10 + x[i];
  }
  return t;
}
void in(int x[4], int n) { //存数组函数
  for (int i = 0; i < 4; i++) {
    x[i] = n % 10;
    n /= 10;
  }
}
int main() {
  int n;
  cin >> n;
  int arr[4], brr[4], a, b, c;
  in(brr, n);
  sort(brr, brr + 4);
  fan(arr, brr);
  a = getsorce(arr);
  b = getsorce(brr);
  if (a == b) {
    cout << a << " - " << b << " = 0000";
  } else {
    c = a - b;
    while (c != 6174) {
      printf("%04d - %04d = %04d\n", a, b, c);
      in(brr, c);
      sort(brr, brr + 4);
      fan(arr, brr);
      a = getsorce(arr);
      b = getsorce(brr);
      c = a - b;
    }
    printf("%04d - %04d = %d", a, b, c);
  }
}

看看:


前:

16e8d14947b24331b0a92ac54b8b5177.png

后:

856b1cb180834994bc9e4b81130014f9.png


所以,测试点二是:

两数相减后,若差值为189,得是0189

相关文章
|
4月前
|
Java Spring
jwt解析方法找不到(Cannot resolve method ‘parseClaimsJws‘ in ‘JwtParserBuilder‘ )
解决Cannot resolve method ‘parseClaimsJws‘ in ‘JwtParserBuilder‘
|
6月前
|
存储 人工智能 项目管理
2025年GitHub平台上的十大开源MCP服务器汇总分析
本文深入解析了GitHub上十个代表性MCP(Model Context Protocol)服务器项目,探讨其在连接AI与现实世界中的关键作用。这些服务器实现了AI模型与应用程序、数据库、云存储、项目管理等工具的无缝交互,扩展了AI的应用边界。文中涵盖Airbnb、Supabase、AWS-S3、Kubernetes等领域的MCP实现方案,展示了AI在旅行规划、数据处理、云存储、容器编排等场景中的深度应用。未来,MCP技术将向标准化、安全性及行业定制化方向发展,为AI系统集成提供更强大的支持。
1287 2
2025年GitHub平台上的十大开源MCP服务器汇总分析
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
人工智能 自然语言处理
使用Kimi+Markmap总结文件内容生成思维导图原创
一份文件内容太长,完整阅读下来太费时间,但如果使用AI进行内容提炼,再总结成思维导图,方便快速看到这份文件的核心内容和主题结构,就会极大地节约时间,目前就可以使用Kimi+Markmap这两个工具,帮我们把ppt、word、pdf等文件内容快速总结成思维导图。
2376 8
使用Kimi+Markmap总结文件内容生成思维导图原创
|
JavaScript 数据库
【vue】vue2 数据回显取消编辑不修改原数据
【vue】vue2 数据回显取消编辑不修改原数据
431 1
|
机器学习/深度学习 数据处理
【YOLOV5-6.x讲解】数据增强方式介绍+代码实现
数据增强 学习到空间的不变形,像素级别的不变形特征都有限,利用平移,缩放,旋转,改变色调值等方法,让模型见过各种类型的数据,提高模型在测试数据上的判别力
2550 0
|
PyTorch 算法框架/工具 Windows
【Windows pytorch-gpu环境】RuntimeError: Attempt to start a new process before the current process has
【Windows pytorch-gpu环境】RuntimeError: Attempt to start a new process before the current process has
316 0
|
传感器 存储 运维
「IT运维」集成和自动化的平台 StackStorm概述
「IT运维」集成和自动化的平台 StackStorm概述
|
XML 定位技术 Android开发
Android中获取当前位置信息
这篇教程主要介绍了在Android平台上如何使用服务完成定位功能。众所周知,Android设备的当前位置信息,对开发创新性App、解决人们日常生活问题有极大帮助。在Android平台开发定位相关的应用程序,需要位置提供者。有两种类型的位置提供者:
1321 0
Android中获取当前位置信息