张成岗(CZ)的博客世界分享 http://blog.sciencenet.cn/u/zcgweb 脑损伤与脑保护;神经认知;生物信息;蛋白质组;辐射损伤与防护

博文

[转载]数字黑洞:给定一个各位数字不完全相同的四位正整数,如果先把四个数字按递减排序,再按递增排序,然后两者相减(大的减去小的)

已有 1022 次阅读 2021-9-15 09:33 |系统分类:科研笔记|文章来源:转载

数字黑洞


ClearPromise 2019-05-01 14:09:47   1814   已收藏 2


给定一个各位数字不完全相同的四位正整数,如果先把四个数字按递减排序,再按递增排序,然后两者相减(大的减去小的),将会得到一个新的数字,对新的数字重复此步骤,很快就会停在数字黑洞“6147”


https://blog.csdn.net/qq_41303159/article/details/89737426


输入:

6767

输出:

7766-6677=1089

9810-0189=9621

9621-1269=8352

8532-2358=6174

输入:

3333

输出:

3333-3333=0000

分析:显然数字排序首要应把数字放进一个数组内,然后进行两次排序,一次递增一次递减,然后将数组数字合成整数进行相加减,大致代码如下:


#include <cstdio>

#include <algorithm>

using namespace std;

void toarray(int n,int num[])

{

    for(int i=0;i<4;i++)

    {

        num[i]=n%10;

        n=n/10;

    }

}

 

int tosum(int num[])

{

    int sum=0;

    for(int i=0;i<4;i++)

    {

        sum=sum*10+num[i];

    }

    return sum;

}

 

bool cmp(int a,int b)

{

    return a>b;         //递减排序,获得最大数

}

 

int main()

{

    int n,maxn,minn;

    int num[8];

    scanf("%d",&n);

    while(1)

    {

        toarray(n,num);

        sort(num,num+4);

        minn=tosum(num);  //得到最小值

        toarray(n,num);

        sort(num,num+4,cmp);

        maxn=tosum(num);  //得到最大值

        n=maxn-minn;

        printf("%d-%d=%d\n",maxn,minn,n);

        if(n==0||n==6174) break;

    }

    return 0;

}

 

————————————————

版权声明:本文为CSDN博主「ClearPromise」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41303159/article/details/89737426 




https://blog.sciencenet.cn/blog-40692-1304249.html

上一篇:[转载]数学黑洞:对于数学黑洞,无论怎样设值,在规定的处理法则下,最终都将得到固定的一个值,再也跳不出去了
下一篇:[转载]人类有三个大脑? ——有趣的Triune Brain假说
收藏 IP: 124.207.31.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-28 21:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部