#include <stdio.h> #include <math.h> const int N=4; int GetMax( int n); int GetMin( int n); int check(int); int idigit(int n,int a[N]); int main() { int n; printf("input a four-digit number that is not the same as each digit\n"); while (1){ scanf("%d",&n); if(n>999&&n<10000&&check(n)){ break; }else{ printf("illegal input,try again\n"); fflush(stdin); } } while(n!=6174&&n) { printf("%4d - %4d = %4d\n",GetMax(n),GetMin(n),GetMax(n)-GetMin(n)); n = GetMax(n) - GetMin(n); } return 0; } int GetMax( int n){ int a[N],i,result=0; idigit(n,a); for (i = 0; i < N; i++) { result+=a[i]*pow(10,N-i-1); } return result; } int GetMin( int n){ int a[N],i,j,t,result=0; idigit(n,a); for (i = 0; i < N; i++) { result+=a[i]*pow(10,i); } return result; } int check(int n){ int arr[N]; for(int i=0;i<N;i++){ arr[i]=n%10; n/=10; } for(int i=0;i<N-1;i++){ for(int j=i+1;j<N;j++){ if(arr[i]==arr[j]){ return 0; } } } return 1; } int idigit(int n,int a[N]){ int i,j,t; for(i=0;i<N;i++){ a[i]=n%10; n/=10; } for(i=0;i<N-1;i++){ for(j=i+1;j<N;j++){ if(a[i]<a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; } } } return 1; }
编写程序验证卡布列克运算,任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
(3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。
#include<stdio.h> int idigit(int n,int a[4]) //取得四位数,并按照从大到小的顺序排列 { int i=0,j,t; 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]) { t=a[i]; a[i]=a[j]; a[j]=t; } return 1; } int getmin(int n) //重新生成最小的四位数m { int a[4],i,j,t,m=0; //数组;两个循环变量;各位置值t;传递继承值m; idigit(n,a); for(i=3;i>=0;i--) //数组的最小情况(倒着) { t = 1; for(j=0;j<i;j++) //循环3+2+1+0=6次 t *= 10; m += t * a[i]; } return m; } int getmax(int n) //重新生成最大的四位数m { int a[4],i,j,t,m=0; idigit(n,a); for(i=0;i<4;i++) { t = 1; for(j=0;j<3-i;j++) t *= 10; m += t * a[i]; } return m; } int check(int n){ int arr[4]; for(int i=0;i<4;i++){ arr[i]=n%10; n/=10; } for(int i=0;i<3;i++){ for(int j=i+1;j<4;j++){ if(arr[i]==arr[j]){ return 0; } } } return 1; } int main() { int n; printf("Please enter a four digit number that is not the same as each digit:\n"); while (1){ scanf("%d",&n); if(n>999&&n<10000&&check(n)){ break; }else{ printf("illegal input,try again\n"); fflush(stdin); } } while(n!=6174) { printf("%4d - %4d = %4d\n",getmax(n),getmin(n),getmax(n)-getmin(n)); n = getmax(n) - getmin(n); } return 0; }
原文:https://www.cnblogs.com/jeseesmith/p/12744921.html