數字黑洞問題

給定任一個各位數字不完全相同的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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 傳送門 https://pintia.cn/problem-sets/994805260223102976/pro...
    Rush的博客閱讀 2,728評論 1 3
  • 我的PAT系列文章更新重心已移至Github,歡迎來看PAT題解的小伙伴請到Github Pages瀏覽最新內容。...
    OliverLew閱讀 1,291評論 0 1
  • 給定任一個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然后用第1個數字減第2...
    小路_閱讀 242評論 0 0
  • 概述排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的...
    Luc_閱讀 2,299評論 0 35
  • 有朋友到小蘇這里來吐槽,自己最近心情非常煩躁,遇到不順心的事情就容易很慌張,不知道自己怎么去面對,越是這種時候,心...
    更好時代閱讀 621評論 0 0