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 1084 外觀數列 【模擬】
- PAT-B 1012 數字分類【簡單模擬】
- PAT-B 1008 陣列元素迴圈右移問題【簡單模擬】陣列
- 數字10的黑洞
- 數字5的黑洞
- .NET 下 模擬陣列越界陣列
- PAT-B 1017 A除以B【模擬 大數除法】
- [NOIP 2024 模擬2]陣列操作陣列
- 陣列模擬單連結串列陣列
- PAT-B 1024 科學計數法【模擬+字串】字串
- 6.5陣列--模擬、偏移量-螺旋矩陣陣列矩陣
- PAT-B 1027 列印沙漏 【模擬】
- PAT-B 1066 影象過濾【陣列】陣列
- PAT-B 1058 選擇題 【模擬】
- PAT-B 1061 判斷題【模擬】
- PAT-B 1067 試密碼【模擬】密碼
- PAT-B 1071 小賭怡情【模擬】
- java解決數字黑洞問題Java
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- 陣列中重複的數字陣列
- PAT-B 1054 求平均值 【模擬】
- PAT-B 1072 開學寄語【模擬】
- PAT-B 1081 檢查密碼【模擬】密碼
- PAT-B 1085 PAT單位排行【模擬】
- PAT-B 1018 錘子剪刀布 【模擬】
- PAT-B 1092 最好吃的月餅【陣列】陣列
- PAT-B 1083 是否存在相等的差【陣列】陣列
- PAT-B 1048 數字加密【字串】加密字串
- 陣列模擬雙連結串列,你get到了嗎?陣列
- 陣列模擬單連結串列你會了嗎?陣列
- PAT-B 1059 C語言競賽【模擬】C語言
- 資料轉換-整數字節陣列陣列
- 查詢陣列中出現次數大於陣列長度一半的數字陣列
- JS模擬陣列操作(新增、刪除、插入、排序、反轉)JS陣列排序
- PAT-B 1077 互評成績計算【模擬】
- PAT甲級真題1069 數字黑洞(巧妙解法)