验证卡布列克运算
验证卡布列克运算。即:任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);
(3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果总是6174。这个数被称为卡布列克常数。请编写一个递归函数,完成以上的卡布列克运算。
输入格式要求:”%d” 提示信息:”Enter number:”
输出格式要求:” [%d]:%d-%d=%d\n”
程序运行示例如下:
Enter number: 1234
【1】:4321-1234=3087
【2】:8730-378=8352
【3】:8532-2358=6174
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<stdio.h>
int i,j;
void kabrack(int n,int cnt) { int a[4],min,max,temp; for(i=0;i<4;i++) { a[i]=n%10; n=n/10; } for(i=0;i<3;i++) { for(j=i+1;j<4;j++) { if(a[i]<a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } max=1000*a[0]+100*a[1]+10*a[2]+a[3]; min=1000*a[3]+100*a[2]+10*a[1]+a[0]; n=max-min; printf(" [%d]:%d-%d=%d\n",cnt,max,min,n); if(n==0) { printf(" [%d]:%d-%d=%04d\n",cnt,max,min,n); return; } if(n==6174) return; kabrack(n,cnt+1);
}
int main() { int cnt=1,n; printf("Enter number:"); scanf("%d",&n); kabrack(n,cnt); return 0; }
|
基础的数组运用。