Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >1019. 数字黑洞 (20)

1019. 数字黑洞 (20)

作者头像
AI那点小事
发布于 2020-04-20 10:18:49
发布于 2020-04-20 10:18:49
5200
举报
文章被收录于专栏:AI那点小事AI那点小事

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

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

7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 … …

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

输入格式:

输入给出一个(0, 10000)区间内的正整数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

代码语言:javascript
AI代码解释
复制
#include <iostream>
using namespace std;

bool IsSame( int a)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
        num[i] = a % 10;
        a /= 10;
    }
    int tmp = num[0];
    int count = 1;
    for ( int i = 1 ; i < 4 ; i++){
        if (num[i] == tmp){
            count++;
        }
    }
    if ( count == 4){
        return true;
    }else{
        return false;
    }
}

int NotMaxSort(int Num)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
            num[i] = Num % 10;
            Num /= 10;
    }
    for ( int i = 0 ; i < 3 ; i++){
        for ( int j = i + 1 ; j < 4 ; j++){
            if ( num[j] >= num[i] ){
                num[i] = num[i] + num[j];
                num[j] = num[i] - num[j];
                num[i] = num[i] - num[j];
            }
        }
    } 
    int sum = 0;
    for ( int i = 0 ; i < 4 ; i++){
        sum = sum * 10 + num[i];
    } 

    return sum;
}

int NotMinSort(int Num)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
            num[i] = Num % 10;
            Num /= 10;
    }
    for ( int i = 0 ; i < 3 ; i++){
        for ( int j = i + 1 ; j < 4 ; j++){
            if ( num[j] <= num[i] ){
                num[i] = num[i] + num[j];
                num[j] = num[i] - num[j];
                num[i] = num[i] - num[j];
            }
        }
    } 
    int sum = 0;
    for ( int i = 0 ; i < 4 ; i++){
        sum = sum * 10 + num[i];
    } 

    return sum;
}

int main()
{
    int Num;
    cin>>Num;
        if ( IsSame(Num) == false){
            int a ,b ,c;
            do{
                a =  NotMaxSort(Num);
                b =  NotMinSort(Num);
                c = a - b;
                cout<<a<<" - ";
                if ( b == 0 ){
                    cout<<"0000 = "<<c<<endl;
                }else{
                    if ( b / 10 == 0){
                        cout<<"000"<<b<<" = "<<c<<endl;
                    }else{
                        if ( b / 100 == 0){
                            cout<<"00"<<b<<" = "<<c<<endl;
                        }else{
                            if ( b / 1000 == 0){
                                cout<<"0"<<b<<" = "<<c<<endl;
                            }else{
                                 cout<<b<<" = "<<c<<endl;
                            }
                        }
                    } 
                }
                Num = c;
            }while( c != 6174);
        }
        else{
            cout<<Num<<" - "<<Num<<" = 0000\n"; 
        }

    return 0;
}

(PS:图中显示的错误实在找不出来了。)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PAT乙级真题 / 知识点(1)
起初,报PAT是伙伴推荐。但在报名路途中,有朋友说,花时间到这上面不值得,还有学长说没听过,野鸡杯。
十二.
2025/10/22
920
PAT (Basic Level) Practice (中文)1019 数字黑洞
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
C you again 的博客
2020/09/15
3800
PAT乙级1019
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
全栈程序员站长
2022/08/23
2650
PAT (Basic Level) Practice (中文)1019 数字黑洞 (20 分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
glm233
2020/09/28
3720
【PAT乙级真题】1019 数字黑洞 (20分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
韩旭051
2020/06/23
4020
PAT(乙级)1019
分析:这个题目,没什么难度。但是我被超时问题困扰了一会儿,可能是scanf函数用的次数有点多,所以改了一下,直接通过了。
zy010101
2019/05/25
4410
1019 数字黑洞 (20 分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
可爱见见
2019/09/09
1.3K1
1019 数字黑洞 (20 分)
【南理oj】57 - 6174问题(水)
时间限制: 1000 ms | 内存限制: 65535 KB
FishWang
2025/08/26
1480
PAT (Basic Level) Practice (中文)--1019 数字黑洞 (20 分)
1019 数字黑洞 (20 分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
杨鹏伟
2022/05/05
3880
IO竞赛2025年题目解析:入门级难度(1-3)
IO竞赛是培养和选拔优秀计算机人才的重要平台。2025年的IO竞赛在难度和题型上都有新的变化,为了帮助初学者更好地准备竞赛,本文将详细解析2025年入门级(难度系数1-3)的IO竞赛题目,包括解题思路、算法选择和代码实现。
安全风信子
2025/11/13
1230
PAT乙级真题(2014·冬)
1033、旧键盘打字-(解析)-输入格式!这才是重点(┬┬﹏┬┬),让我多瞧了20分钟
十二.
2025/10/22
1420
【PAT甲级】The Black Hole of Numbers
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
4290
【PAT乙级】数字黑洞
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
6380
数字黑洞 C语言
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
叶茂林
2023/07/28
6830
数字黑洞
数字黑洞简介: 黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。—《互动百科》
lexingsen
2022/02/24
8800
1044. 火星数字(20)
地球人的0被火星人称为tret。 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。 火星人将进位以后的12个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。 例如地球人的数字“29”翻译成火星文就是“hel mar”;而火星文“elo nov”对应地球数字“115”。为了方便交流,请你编写程序实现地球和火星数字之间的互译。
AI那点小事
2020/04/20
3320
1044. 火星数字(20)
PAT (Basic Level) Practice
卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 3n+1砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 3n+1,以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
Naraku
2021/07/29
1.6K0
PAT (Basic Level) Practice
1089 狼人杀-简单版 (20 分)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
5840
【2020HBU天梯赛训练】7-35 凑零钱
韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有 10​4​​ 枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。
韩旭051
2020/06/23
7770
C++上机考试试题解析
C++上机考试试题解析 0x1 求日期是该年的第几天 输入日期(年、月、日),输出它是该年的第几天。 Input year, month, day:1981 3 1 判断闰年方法:a%4==0&&a%100!=0||a%400==0 #include<iostream> using namespace std; int main() { cout<<"Input year, month, day:"; int a,b,c,temp=0; int days,i; cin>>a
慕白
2018/07/06
6.3K0
相关推荐
PAT乙级真题 / 知识点(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场