PTA | 1019 数字黑洞 (20分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的
6174
,这个神奇的数字也叫 Kaprekar 常数。例如,我们从
6767
开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个 \((0,104)\) 区间内的正整数$ N$。
输出格式:
如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000
;否则将计算的每一步在一行内输出,直到 6174
作为差出现,输出格式见样例。注意每个数字按 4
位数格式输出。
输入样例 1:
6767
输出样例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
输入样例 2:
2222
输出样例 2:
2222 - 2222 = 0000
部分正确代码
#include<bits/stdc++.h>
using namespace std;bool f1(int n) {int t = n % 10;n /= 10;while (n) {if (t != n % 10)return false;n /= 10;}return true;
}int main() {int n;cin >> n;if (f1(n)) {printf("%04d - %04d = %04d\n", n, n, n - n);return 0;}string s = to_string(n);sort(s.begin(), s.end());n = stoi(s);reverse(s.begin(),s.end());int t= stoi(s);while (t - n != 6174) {printf("%04d - %04d = %04d\n", t, n, t - n);s = to_string(t - n);sort(s.begin(), s.end());n = stoi(s);reverse(s.begin(), s.end());t = stoi(s);}//cout << t << " - " << n << " = " << t - n << endl;printf("%04d - %04d = %04d\n", t, n, t - n);return 0;
}
//没考虑清楚时间复杂度
考虑了学姐的代码以后修改
分析:有一个测试用例注意点,如果当输入N值为6174的时候,依旧要进行下面的步骤,直到差值为6174才可以~所以用do while语句,无论是什么值总是要执行一遍while语句,直到遇到差值是0000或6174~
s.insert(0, 4 – s.length(), ‘0’);用来给不足4位的时候前面补0~
#include<bits/stdc++.h>
using namespace std;
bool cmp(char a, char b) { return a > b; }
int main() {string s;cin >> s;s.insert(0, 4 - s.length(), '0');do {string a = s, b = s;sort(a.begin(), a.end(), cmp);sort(b.begin(), b.end());int result = stoi(a) - stoi(b);s = to_string(result);s.insert(0, 4 - s.length(), '0');cout << a << " - " << b << " = " << s << endl;} while (s != "6174" && s != "0000");return 0;
}
Ps.感觉自己写代码的时候还是有很多不足
PTA | 1019 数字黑洞 (20分)相关推荐
- C++学习之路 | PTA乙级—— 1019 数字黑洞 (20分)(精简)
1019 数字黑洞 (20分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这 ...
- 1019 数字黑洞 (20 分)(c语言)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有" ...
- 15行代码AC——1019 数字黑洞 (20分) 甲级1069. The Black Hole of Numbers (20)(解题报告)
立志用更少的代码做更高效的表达 PAT甲级最优题解-->传送门 Pat乙级最优化代码+题解+分析汇总-->传送门 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非 ...
- PAT乙级 1019 数字黑洞 (20 分)
题目内容 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有 ...
- 1019 数字黑洞 (20 分)
原题链接 题面 思路 就是以字符串的形式读入,通过sort排序来实现升序排和降序排,通过string+ insert 的方式补全占位的 0. 坑点 就是一个数字不足四位时,必须要先在前面用 0 占位, ...
- 【PAT乙级】1019 数字黑洞 (20 分)
https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968 注意补前导零. 例: 输入 9 应为0009 ...
- 1019 数字黑洞 (20分)
输入样例 1: 6767 输出样例 1: 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 输入样 ...
- 1019 数字黑洞 (20)
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞&qu ...
- 1019. 数字黑洞 (20)
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞&qu ...
最新文章
- Google Test(GTest)使用方法和源码解析——自定义输出技术的分析和应用
- OMG!我居然把新首页设计出来了!
- linux docker 跑代码_使用Docker 搭建自动化测试环境
- Android IOS WebRTC 音视频开发总结(四二)-- webrtc开发者大会
- CUDA入门需要知道的东西
- Mybatis 中使用CDATA
- 开放计算架构:蚂蚁金服是如何用一套架构容纳所有计算的?
- linux下nand flash驱动工作原理,Linux驱动之Nand Flash四问,原理、工作方式都包含了...
- 关于物联网规则引擎技术,你想要知道的都在这儿!
- mui框架下监听返回按钮
- vmware中nat模式中使用静态ip后无法上网的问题
- 实战爬虫:python爬虫学习笔记之爬取搜狗|微信文章——动态网页爬取
- JIT 编译器 是什么
- C语言程序段的定义、实际应用分析
- python 串口接收多线程与界面通信_Python之PyQT多线程串口代码分析
- 全自动IC半导体MCU芯片烧录flash大批量生产出货的解决方案分析
- 任务栏文件资源管理器打开特别卡
- java文字生成水印图片
- 每个python文件就是一个模块、模块的名字就是_每个Python文件都可以作为一个模块,模块的名字就是 的名字_学小易找答案...
- 雷库兹韦尔量子计算机,人物 | 他说,再挺11年,送你长生不老,要不要?
热门文章
- JoJoGAN One-Shot Face Stylization:使用 StyleGAN 创建 JoJo风格人脸头像
- 我市智慧城市建设迈入快车道
- Excel VS Python 第三期——重复值处理
- 微信公众号注册显示法人信息不一致怎么办?
- 苹果手机桌面计算机没6,iPhone的实用攻略如此多,这6个你又知道吗
- 如何将讲课视频录制下来,只需要三步搞定.
- 三星更新出现android,部分三星 A70手机更新最新安卓10底层版本出现变砖
- 增加字库 安卓_Android为TextView添加字体库和设置描边的方法
- 服务器信息为什么会被窃取,还在用Websockets的JavaScript开发人员们,你们可能会被窃听!...
- 京东2016版首页改版前端总结