C語言中的數學黑洞

2021-10-13 13:50:13 字數 1464 閱讀 7516

這是乙個非常有意思的數學問題, kaprekar問題也被稱為數學黑洞,同樣,我們把他放到程式設計中,我們就可以簡化他。對於數學黑洞,無論怎樣設值,在規定的處理法則下,最終都將得到固定的乙個值,再也跳不出去了,就像宇宙中的黑洞可以將任何物質,以及執行速度最快的光牢牢吸住,不使它們逃脫一樣。這就對密碼的設值破解開闢了乙個新的思路。

以下是乙個較為簡單的三位數的 kaprekar問題。

【問題描述】任何乙個各位數字不全相同的三位數,經有限次「重排求差」操作,總會得到495。最後所得的495即為三位黑洞數。所謂「重排求差」操作即組成該數的數字重排後的最大數減去重排後的最小數。

例如,對三位數207:

第1次重排求差得:720 - 27 = 693;

第2次重排求差得:963 - 369 = 594;

第3次重排求差得:954 - 459 = 495;

以後會停留在495這一黑洞數。如果三位數的3個數字全相同,一次轉換後即為0。

任意輸入乙個三位數,程式設計給出重排求差的過程。

【輸入形式】在一行中給出乙個三位數

【輸出形式】按照以下格式輸出重排求差的過程:

序號: 數字重排後的最大數 - 重排後的最小數=差值

序號從1開始,直到495出現在等號右邊為止
【樣例輸入】

【樣例輸出】

1:321-123=198

2:981-189=792

3:972-279=693

4:963-369=594

5:954-459=495

【樣例說明】輸出中的除數字外的符號(: - =)均為英文輸入法下,且這些符號的左右均無空格。

依據問題描述,我們可以自然而然的寫出程式,以下是同學寫出的程式:

#include

#include

intda

(int n)

if(a

if(b

return a*

100+b*

10+c;

}int

xiao

(int n)

if(a

if(b

return c*

100+b*

10+a;

}int

cha(

int x,

int y)

intmain()

}if(i==0)

printf

("1:954-459=495");

return0;

}

以下是該程式的執行結果:

阿巴阿巴。

拜拜。๛ก(ー̀ωー́ก)biu~

SDUT ACM數學黑洞(基於C語言)

time limit 1500 ms memory limit 65536 kib submit statistic discuss problem description 任意乙個4位自然數n n不能是4個數字一樣,如1111 2222 9999是不可以的,n也不能是6174 將組成自然數n的4個...

《C語言及程式設計》資料 C語言中數學函式

返回 賀老師課程教學鏈結 c語言及程式設計初步 c語言的數學庫函式提供了大多數常用的數學功能。使用下面的函式,要求程式前寫預處理命令 include以sin函式為例,說明其用法。double sin double 意味著引數應該提供乙個double型資料,其求值結果,也是乙個double型的值。額外...

C語言 數字黑洞

演算法提高 數字黑洞 時間限制 1.0s 記憶體限制 256.0mb 問題描述 任意乙個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律 1 將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數 2 將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位...