立志用更少的代码做更高效的表达


PAT甲级最优题解——>传送门

Pat乙级最优化代码+题解+分析汇总——>传送门


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

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

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:
输入给出一个 (0,10​4) 区间内的正整数 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


思路分析:

一刷(中规中矩的做法):写了一个排序函数,一个翻转函数, 用while循环遍历, 由于输入如2222或6174这样的数需循环一次再结束, 因此需要做一个特判。 代码量大概是40行左右。

二刷:参考了网上大佬的思路, 借助stoll()、to_string()、sort()等函数完成快速排序及反转, 采用do while循环, 这样就可以在任何情况下都优先输出一次再判断(巧妙!)。 最后只用了15行代码就AC了。

虽然代码二代码量更少,但是效率并不太高, 因为涉及到了整型与字符型的来回切换。 因此将两个代码都放上去, 供大家参考。


关于stoll()函数的用法,见这篇博客——>传送门


思路一

#include<bits/stdc++.h>
using namespace std;int Reserve(int r) {   int num = 0;int T= 3;while(r) {num += r%10*pow(10, T--);r /= 10;}return num;
}int Sort(int r) {int T = 0, a[4] = {0};while(r) {a[T++] = r%10;r /= 10;}sort(a, a+4);int num = 0;for(int i = 0; i < 4; i++) num+= a[i]*pow(10,4-i-1);return num;
}int main() {int b1; cin>>b1;b1 = Sort(b1);int b2 = Reserve(b1); if(b1 == b2 || b1 == 6174)  {printf("%04d - %04d = %04d\n", b2, b1, b2-b1);return 0; }while(b1!=6174) {b1 = Sort(b1);int b2 = Reserve(b1); printf("%04d - %04d = %04d\n", b2, b1, b2-b1);b1 = b2-b1;}
return 0; }

思路二

#include<bits/stdc++.h>
using namespace std;
int main() {int n; cin>>n;
//  cout << setfill('0');   //全篇填充0 do{string s = to_string(n); while(s.size() < 4) s += '0';sort(s.begin(), s.end());int a = stoll(s);sort(s.begin(), s.end(), greater<char>());int b = stoll(s);n = b-a;printf("%04d - %04d = %04d\n", b, a, n);} while(n != 0 && n != 6174);
return 0; }

15行代码AC——1019 数字黑洞 (20分) 甲级1069. The Black Hole of Numbers (20)(解题报告)相关推荐

  1. 15行代码AC——ZOJ - 4118 Stones in the Bucket(思维题+优化方案)(第十届山东省ACM程序设计竞赛F题)

    励志用少的代码做高效表达. 思路分析 题意:给定n个数,问最少操作几次,使数列中的数全部相等. 操作一:将数列中任意数减一. 操作二:将数列中任意数减一.任意数加一(相当于把1挪过去) 涉及到最少的题 ...

  2. (解题报告)L1-032 Left-pad (20分)——15行代码AC

    立志用更少的代码做更高效的表达 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块 ...

  3. 15行代码AC——习题3-3 数数字 (UVa1225,Digit Counting)

    大意: 把n(n<=10000)个整数顺序写在一起,求0~9分别出现多少次 Sample Input 2 3 13 Sample Output 0 1 1 1 0 0 0 0 0 0 1 6 2 ...

  4. 1032 挖掘机技术哪家强 (20分)——15行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输 ...

  5. 测试点3的分析:1022 D进制的A+B (20分)——15行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 输入两个非负 10 进制整数 A 和 B (≤2​30−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输 ...

  6. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)

    励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...

  7. 15行代码AC——习题3-1 得分 (UVa1585,Score)

    题意概述 给出一个由O和X组成的串,统计得分,O得分为目前连续出现的O的个数,X的得分为0. 如:OOXXOXXOOO得分为:1+2+0+0+1+0+0+1+2+3=10 Sample Input 5 ...

  8. 15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVA-10391 本题实质是#include<string>头文件的substr()字符串分割函数与#include<algorith ...

  9. 【PAT甲级 前导0,排序】1069 The Black Hole of Numbers (20 分) C++ 全部AC

    题目 一直循环相减即可,直到结果为6174或者四个数字相同就结束循环 题解 C++ #include<iostream> #include<stdio.h> #include& ...

最新文章

  1. 使用pydub做静音帧去除
  2. Centos7+Mysql5.7实现主从复制
  3. vsftp mysql_vsftp mysql安装配置
  4. 背包问题lingo求解
  5. python的matplotlib问题
  6. ArrayList的四种初始化方法
  7. 高通骁龙855刚捂热 骁龙865就现身:三星代工 7nm EUV制程
  8. 我的docker随笔24:docker产生coredump文件
  9. double-talk检测算法分类
  10. 用cglib生成的代理类取不到注解的问题
  11. 习惯自律错误让我们真正成长
  12. Qt —— 海康SDK获取视频并OpenCv处理每帧图像进行显示
  13. 神州数码无线配置命令
  14. U3D常用介绍,搭建一个简单的三维效果
  15. 点云渲染的颗粒感和背景色相关
  16. 《热尼亚·鲁勉采娃》 作者:尤里·纳吉宾 推荐者:路遥
  17. oracle begin exception end,Oracle Exception异常处理
  18. 【历史上的今天】11 月 4 日:“光纤之父”出生;StumbleUpon 诞生;谷歌推出 Google Home
  19. 象棋笔记 象棋桥 象棋旋风
  20. python的PDF工具

热门文章

  1. 再见了kafka2.0时代,去掉了zk的kafka3.0才是时代新王!
  2. 细数 Spring 那些最常见的面试问题
  3. (RabbitMQ) Java Client API Guide
  4. 恐怖如斯,阿里P9总结的这份Java八股文,已经帮近百人拿到offer了
  5. 字节跳动---特征提取
  6. LiveVideoStackCon 2022 上海站 专题抢先看
  7. 三星电子推出X-net架构用于语音通话
  8. Content-type的说明即HTTP请求头的类型整理
  9. TensorFlow文件操作
  10. Linux Shell 文本处理工具集锦