数学黑洞问题

来源:互联网 发布:iphone长截图软件 编辑:程序博客网 时间:2024/04/28 23:24

“数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。


#include <stdio.h>#define INIT 1234#define SWAP(arr,i,j)\{arr[i]^=arr[j];arr[j]^=arr[i];arr[i]^=arr[j];}#define PUSHMIN(arr, i, j)\if(arr[i]>arr[j])SWAP(arr,i,j);#define SORTARR4(arr)\{\PUSHMIN(arr,0,1);\PUSHMIN(arr,0,2);\PUSHMIN(arr,0,3);\PUSHMIN(arr,1,2);\PUSHMIN(arr,1,3);\PUSHMIN(arr,2,3);\}#define I2A(num,arr)\{\arr[0]=(num)/1000%10;\arr[1]=(num)/100%10;\arr[2]=(num)/10%10;\arr[3]=(num)%10;\}#define A2II(arr,num)\num=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];#define A2ID(arr,num)\num=arr[3]*1000+arr[2]*100+arr[1]*10+arr[0];int main(int argc, const char *argv[]){unsigned int cur = 1234, prev = 0;unsigned int max, min;unsigned char arr[4];while (1){prev = cur;I2A(cur,arr);SORTARR4(arr);A2ID(arr,max);A2II(arr,min);cur = max - min;if (prev == cur){printf("%d\n", cur);break;}}return 0;}


最后求出这个黑洞数是6174

原创粉丝点击