驗證卡布列克運算。任意一個四位數,只要它們各個位上的數字是不盡相同的,就有這樣的規律。
卡布列克常數
驗證卡布列克運算。任意一個四位數,只要它們各個位上的數字是不盡相同的,就有這樣的規律:
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\n",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\n",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;
}