黑洞最開始**於神秘的天文學,黑洞是時空曲率大到光都無法從其事件視界逃脫的天體,簡單來說就是一旦進入這個介面,連光也逃不出來,黑洞會發出耀眼的光芒,體積會縮小,甚至會**,會噴射物體,發出耀眼的光芒。當英國物理學家史蒂芬·威廉·霍金於2023年做此預言時,整個科學界為之震動。
再後來,數學界便借用這個「黑洞」來指某種運算,這種運算一般限定從某些整數出發,反覆迭代後結果必然落入乙個點或若干點的情況叫數字黑洞。
數學中有乙個神秘的數字黑洞是著名的6174問題即卡普雷卡爾(kaprekar)常數:取任意四位數字(四位數字相同bai,三位數字相同,另乙個數字與此數之差為1,除1112, 6566個等),重新組合此數的四位,形成可能的最大數和可能的最小數,然後計算兩者之間的差值;對這個差異重複同樣的過程,最後你總是到達達卡·普拉卡6174的黑洞,到達黑洞需要14步。
下面這道題呢來自這個神秘的6174問題
題目描述:
任意乙個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律:
1)將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數;
2)將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數(如果四個數中含有0,則得到的數不足四位);
3)求兩個數的差,得到乙個新的四位數(高位零保留)。
重複以上過程,最後一定會得到的結果是6174。
比如:4312 3087 8352 6174,經過三次變換,得到6174
輸入
乙個四位整數,輸入保證四位數字不全相同
輸出
乙個整數,表示這個數字經過多少次變換能得到6174
樣例輸入
4312
樣例輸出
31、輸入:考慮對四位整數的輸入用陣列儲存,但注意不能直接處理,否則難以在處理後對前後四位數進行比較。
2、處理:兩次排序可用陣列特性減少迴圈遍歷的重數,但大數必須先處理,否則相減後可能出現三位數情況。
#include
int main()
int a[4];
int n;
scanf("%d",&n);
while(n--)
int num=0;
int s,q,p,w=0,i,j,k,t,u,m;
scanf("%d",&m);
while(1)
a[0]=m/1000;
a[1]=m/100%10;
a[2]=m/10%10;
a[3]=m%10;
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j]t=a[j];a[j]=a[k];a[k]=t;
p=a[0]*1000+a[1]*100+a[2]*10+a[3];
q=a[3]*1000+a[2]*100+a[1]*10+a[0];
m=p-q;
num++;
if(w==m)
printf("%dn",num);
break;
w=m;
return 0;
如果你也有思路敲出來了可以去測試一下:
[藍橋杯][演算法提高vip]數字黑洞 - c語言網www.dotcpp.com
求整數的位數以及各位數之和
輸入乙個正整數 repeat 0 輸入乙個整數n n 10 100 輸出它的位數以及各位數之和。include include 標頭檔案,對應 下的函式strlen.int main printf number d,sum d ans1,sum return 0 解題思路 輸入乙個正整數 repea...
C 求各位數之和
不多說,直接上 宣告變數 int digit,num1,num2,num3,num4,num5 console.writeline 請輸入乙個五位數 digit convert.toint32 console.readline num1 digit 10 num2 digit 10 10 num3 ...
1006求正整數的位數及各位數字和
include 廈門理工學院 計算機與資訊工程學院 fnlock 程式描述 3 5求正整數的位數及各位數字和 time limit 1000ms memory limit 65536k total submit 4842 accepted 1221 description 輸入個正整數num,求它的...