求整數的位數及各位數字之和c語言 藍橋杯之數字黑洞

2021-10-11 18:18:12 字數 1706 閱讀 6994

黑洞最開始**於神秘的天文學,黑洞是時空曲率大到光都無法從其事件視界逃脫的天體,簡單來說就是一旦進入這個介面,連光也逃不出來,黑洞會發出耀眼的光芒,體積會縮小,甚至會**,會噴射物體,發出耀眼的光芒。當英國物理學家史蒂芬·威廉·霍金於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,求它的...