词条 | 卡布列克运算 |
释义 | 卡布列克常数 验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不尽相同的,就有这样的规律: 1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; 2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位); 3)求两个数的差,得到一个新的四位数(高位零保留)。 重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数 另外三位数的卡布列可常数是495,两位的也有,但是高位的就没有了 pascal算法实现program kblkcs; var n:integer; s:string; a,b,c,d,t,s1,s2:string; a1,a2,c1:integer; m:integer; begin readln(n); str(n,s); repeat a:=s[1];b:=s[2];c:=s[3];d:=s[4]; if a<b then begin t:=a;a:=b;b:=t;end; if a<c then begin t:=a;a:=c;c:=t;end; if a<d then begin t:=a;a:=d;d:=t;end; if b<c then begin t:=b;b:=c;c:=t;end; if b<d then begin t:=b;b:=d;d:=t;end; if c<d then begin t:=c;c:=d;d:=t;end; s1:=a+b+c+d; s2:=d+c+b+a; val(s1,a1,c1); val(s2,a2,c1); m:=m+1; writeln(a1,'-',a2,'=',a1-a2); str(a1-a2,s); if s='6174' then break; until (s='6147')or(a1-a2=6147); writeln(m); end. C算法实现 #include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int num[4]; int number,flag=0; int i,j; void paixu(int *num); int maxium(int *num); int minium(int *num); while(flag==0) { printf("请输入数字:"); scanf("%d",&number); fflush(stdin); for(i=0;i<4;i++) num[i]=(int)(number/pow(10.0,(double)i))%10; for(i=0,flag=1;i<3;i++) { for(j=i+1;j<4;j++) if(num[i]==num[j]) { flag=0; break; } if(flag==0) break; } } paixu(num); number=maxium(num)-minium(num); printf("%d-%d=%d\",maxium(num),minium(num),number); while(number!=6174) { for(i=0;i<4;i++) num[i]=(int)(number/pow(10.0,(double)i))%10; paixu(num); number=maxium(num)-minium(num); printf("%d-%d=%d\",maxium(num),minium(num),number); } } void paixu(int *num) { int i,j,temp; for(i=0;i<4;i++) for(j=0;j<3-i;j++) if(num[j]<num[j+1]) { temp=num[j]; num[j]=num[j+1]; num[j+1]=temp; } } int maxium(int *num) { int max=0,i; for(i=0;i<4;i++) max=max+(int)(num[i]*pow(10.0,3-i)); return max; } int minium(int *num) { int min=0,i; for(i=0;i<4;i++) min=min+(int)(num[i]*pow(10.0,i)); return min; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。