卡布列克常數
阿新 • • 發佈:2018-12-07
題目描述
最近,小Q在數學興趣課中瞭解了“卡布列克常數”。卡布列克是一位數學家,他在研究數字時發現:任意一個不是用完全相同數字組成的四位數,如果對它們的每位數字重新排序,組成一個最大的數和一個最小的數,然後用最大數減去最小數,差不夠四位數時補零,類推下去,最後將變成一個固定的數:6174,這就是卡布列克常數。
例如:4321-1234=3087
8730-378=8352
8532-2358=6174
7641-1467=6174
……
小Q想,我能不能程式設計來驗證呢?輸入一個符合條件的四位數,然後驗證運算過程。
輸入
共1行,為任意一個不是用完全相同數字組成的四位數。
輸出
變為卡布列克常數的運算過程,由若干行組成,每行是一個算式,不含空格。
樣例輸入
複製樣例資料
4321
樣例輸出
4321-1234=3087
8730-378=8352
8532-2358=6174
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp(const void *a,const void *b) { return *(int*)b-*(int *)a; } int fun(int a[],int n) { int i,max=0,min=0; for(i=0;i<4;i++) { max=max*10+a[i]; min=min*10+a[3-i]; } printf("%d-%d=%d\n",max,min,max-min); if(max-min==6174) return 0; else { n=max-min; for(i=0;i<4;i++) { a[i]=n%10; n/=10; } qsort(a,4,sizeof(a[0]),cmp); return fun(a,n); } } int main() { int n,a[4],b,i; scanf("%d",&n); for(i=0;i<4;i++) { a[i]=n%10; n/=10; } qsort(a,4,sizeof(a[0]),cmp); b=fun(a,n); return 0; }
感覺自己的程式碼都挺複雜,哎哎 ,加油。