美文网首页
数字黑洞问题

数字黑洞问题

作者: Fattyu | 来源:发表于2017-07-18 10:14 被阅读0次

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

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

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

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

#include<iostream>
#include <algorithm>
using namespace std;
void dele(int &n)//建立一个函数
{
    int a[4]={0};
    for(int i=0;i<4;i++)//将四个数字分开
    {
        a[i]=n%10;
        n=n/10;
    }
    int max,term;//排序
    for(int i=0;i<4;i++)
    {
        max=i;
        for(int j=i+1;j<4;j++)
            {
                if(a[max]>a[j])
                    continue;
                else
                    max=j;
            }
            if(max!=i)
            {
                term=a[i];
                a[i]=a[max];
                a[max]=term;
            }
    }
    int p,q;
    q=a[0]+a[1]*10+a[2]*100+a[3]*1000;
    p=a[3]+a[2]*10+a[1]*100+a[0]*1000;
    printf("%04d - %04d = %04d\n",p,q,p-q);
    n=p-q;
}
int main()
{
    int n;
    cin>>n;
    while(n!=6174 && n!=0)
        dele(n);
    return 0;
}

以下代码摘自:FlyRush

#include <iostream>
#include <algorithm>

using namespace std;

int compare(const int &a, const int &b){
    return a>b;
}

int main(){
    int n;
    scanf("%d", &n);
    if(n % 1111 == 0){
        printf("%d - %d = 0000\n", n, n);
        return 0;
    }
    else{
        int tmp = n;
        while(true){
            char c[5] = {'0','0','0','0','\0'};
            int a, b;
            for(int i = 3; tmp != 0; i--){
                c[i] = (tmp % 10) + 48;
                tmp /= 10;
            }
            sort(c, c + 4, compare);
            a = (c[0] - 48) * 1000 + (c[1] - 48) * 100 + (c[2] - 48) * 10 + (c[3] - 48);
            printf("%s - ", c);
            sort(c, c + 4);
            b = (c[0] - 48) * 1000 + (c[1] - 48) * 100 + (c[2] - 48) * 10 + (c[3] - 48);
            printf("%s = ", c);
            tmp = a - b;
            printf("%04d\n", tmp);
            if(tmp == 6174){
                break;
            }
        }
    }
    return 0;
}

相关文章

  • 数字黑洞问题

    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2...

  • 1019 数字黑洞

    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 ...

  • Python 数字黑洞

    前言 学校熬了两个星期,在校时看到某本数学教材里讲了一个关于数字黑洞的算法,任何一串非负整数,有限的步骤处理后,终...

  • 1019.数字黑洞

    题目描述 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个...

  • 流量池: 第九章 数字广告(中):搜索入口的大流量获取

    虽然数字广告投放仍存在一些“黑洞”问题,但不可否认的是,一旦企业建立起数字广告投放的宏观概念,能清楚不同投放的组合...

  • PAT-B 1019 数字黑洞 (C语言)

    题目 链接:PAT (Basic Level) Practice 1019 数字黑洞 给定任一个各位数字不完全相同...

  • 不要被黑洞捕获

    黑洞是什么?黑洞是怎样形成的?被黑洞捕获会怎样?………带着这些问题我阅读了华春写的《青少年应该知道的黑洞》一...

  • PAT Basic 1019 数字黑洞

    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 ...

  • 1019. 数字黑洞 (20)

    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2...

  • 520!!!数字黑洞!!!正能量!!!

    既然大家对数字谐音这么感兴趣,我就给大家普及一个数学知识,数字黑洞!!! 把5、2、0三个数字从大到小排列,...

网友评论

      本文标题:数字黑洞问题

      本文链接:https://www.haomeiwen.com/subject/yumckxtx.html