【問題描述】
卡布列克是一位數學家,他在研究數字時發現:任意乙個不是用完全相同數字組成的四位數,如果對它們的每位數字重新排序,組成乙個較大的數和乙個較小的數,然後用較大數減去較小數,差不夠四位數時補零,類推下去,最後將變成乙個固定的數:6174,這就是卡布列克常數。例如:
4321-1234=3087
8730-378=8352
8532-2358=6174
7641-1467=6147
如果k位數也照此辦理,它們不是變成乙個數,而是在幾個數字之間形成迴圈,稱作卡布列克圓舞曲。例如對於五位數54321:
54321-12345=41976
97641-14679=82962--+
98622-22689=75933 |
97533-33579=63954 |
96543-34569=61974 |
97641-14679=82962--+
我們把82962 75933 63954 61974稱作迴圈節,即卡布列克圓舞曲。
【輸入格式】
包含若干行,每行為乙個待求「卡布列克圓舞曲」的起始整數n。
【輸出格式】
每行為對應整數的迴圈節,資料之間用空格隔開。
【輸入樣例】
4321
54321
【輸出樣例】
6174
82962 75933 63954 61974
【資料範圍】
1 < n <= 2147483647。
【關鍵步驟&技巧】
1. 雖然大體步驟不多,然而中間小過程的處理還是有點繁瑣,若哪手抖打錯,debug還是有點累的啦,因此某些步驟還是寫作自定義函式封裝起來,for 程式的可讀性,also for debugging
2. 資料的第一遍讀入時應先得到它的位數,再進行排序組成max&min,畢竟後面的cha的位數必須和原數相同(不同則補0)
所以 3. max&min的組成技巧:將各個數字的數拆散排序存入a[ ]後,for迴圈t-1次(t為位數),定義乙個s=max(or min)最大位數的那個數,迴圈內容:s=s*10+a[i]
優點:保證max、min、cha都是k位數
4. 記得每次求得的cha應儲存在cha[ ]中;
關鍵**:
int a[15]
while(scanf("%lld",&n)==1)
if(flag==0)break;
} max=maxn(t);min=minn(t);
cha[k]=max-min;
int flag=0;//記錄下標
for(int i=1;iif(cha[k]==cha[i])
if(flag!=0)
}}
卡布列克圓舞曲
卡布列克是一位數學家,他在研究數字時發現 任意乙個不是用完全相同數字組成的四位數,如果對它們的每位數字重新排序,組成乙個較大的數和乙個較小的數,然後用較大數減去較小數,差不夠四位數時補零,類推下去,最後將變成乙個固定的數 6174,這就是卡布列克常數。例如 4321 1234 3087 8730 3...
C 求素數 卡布列克運算
1.用迴圈求1 100之間的所有素數,顯示並輸出結果。using system usingsystem.collections.generic using system.linq using system.text namespace q1 class program static void mai...
布列瑟農 狼
我行走在秋風瑟瑟的草原上,我又掉隊了,我不知道兄弟們的朝哪個方向去了,夜越來越深,我不怕危險,但我害怕寂寞.我沿著鐵路,幻想越過去,但我又不敢靠近.這是我聽這首歌想到的場景,一次深夜,我聽到這首歌醒來,我以為我又沒有關電腦,原來是從來面傳來的,夜籠罩在曲子渲染的憂鬱氣氛中,我站在視窗,想聽聽聲音從 ...