PAT-B 1019 數字黑洞【陣列+模擬】
PAT-B 1019 數字黑洞
https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
題目
給定任一個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到一個新的數字。一直重複這樣做,我們很快會停在有“數字黑洞”之稱的 6174
,這個神奇的數字也叫 Kaprekar 常數。
例如,我們從6767
開始,將得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
現給定任意 4 位正整數,請編寫程式演示到達黑洞的過程。
輸入
輸入給出一個 (0,104) 區間內的正整數 N。
輸出
如果 N 的 4 位數字全相等,則在一行內輸出 N - N = 0000
;否則將計算的每一步在一行內輸出,直到 6174
作為差出現,輸出格式見樣例。注意每個數字按 4
位數格式輸出。
樣例輸入
6767
樣例輸出
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
分析
使用陣列模擬減法,具體看程式,註釋很詳細。
C++程式
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y)
{
return x>y;//從大到小排序
}
int a[4],b[4];//a和b分別模擬較大數和較小數
int main()
{
int n,k=3;
scanf("%d",&n);
//將n用陣列a儲存
while(n)
{
a[k--]=n%10;
n/=10;
}
//如果n的四位數一樣
if(a[0]==a[1]&&a[0]==a[2]&&a[0]==a[3])
printf("%d%d%d%d - %d%d%d%d = 0000\n",a[0],a[0],a[0],a[0],a[0],a[0],a[0],a[0]);
else
{
while(1)//當四位數不是6174
{
sort(a,a+4,cmp);//a從大到小排序
for(int i=0;i<4;i++)//b從小到大排序
b[3-i]=a[i];
printf("%d%d%d%d",a[0],a[1],a[2],a[3]);
//模擬減法
for(int i=3;i>=0;i--)
{
a[i]-=b[i];
if(a[i]<0)
{
a[i]+=10;
a[i-1]--;//借位
}
}
printf(" - %d%d%d%d = %d%d%d%d\n",b[0],b[1],b[2],b[3],a[0],a[1],a[2],a[3]);
if(a[0]==6&&a[1]==1&&a[2]==7&&a[3]==4)
break;
}
}
return 0;
}
相關文章
- 1019 數字黑洞 (20 分)javaJava
- PAT1019 數字黑洞(java實現)Java
- 基數排序--陣列模擬桶結構排序陣列
- PAT-B 1008 陣列元素迴圈右移問題【簡單模擬】陣列
- .NET 下 模擬陣列越界陣列
- (C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧C語言陣列C++
- 陣列模擬單連結串列陣列
- PAT-B 1024 科學計數法【模擬+字串】字串
- java解決數字黑洞問題Java
- PAT-B 1067 試密碼【模擬】密碼
- 資料結構之C語言模擬整數陣列實現資料結構C語言陣列
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- 陣列模擬雙連結串列,你get到了嗎?陣列
- PAT-B 1066 影象過濾【陣列】陣列
- 陣列中重複的數字陣列
- PAT-B 1059 C語言競賽【模擬】C語言
- PAT-B 1081 檢查密碼【模擬】密碼
- PAT-B 1048 數字加密【字串】加密字串
- 陣列模擬單連結串列你會了嗎?陣列
- 重排陣列;及消失的數字分析陣列
- JS模擬陣列操作(新增、刪除、插入、排序、反轉)JS陣列排序
- PAT-B 1083 是否存在相等的差【陣列】陣列
- PAT-B 1092 最好吃的月餅【陣列】陣列
- JavaScript求陣列數字的平均值JavaScript陣列
- 阿里研究院:穿越數字黑洞(附下載)阿里
- 查詢陣列中出現次數大於陣列長度一半的數字陣列
- PAT-B 1077 互評成績計算【模擬】
- 找到陣列中出現特定次數數字的問題陣列
- 陣列模擬佇列進階版本——環形佇列(真正意義上的排隊)陣列佇列
- 劍指offer:旋轉陣列的最小數字陣列
- JZ-050-陣列中重複的數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 刪除排序陣列中的重複數字排序陣列
- 448. 找到所有陣列中消失的數字陣列
- 字尾陣列模板陣列
- 字尾陣列 SA陣列
- PAT-B 1005 繼續(3n+1)猜想【陣列】陣列
- 統計陣列中各數字(元素)出現的次數陣列