void sort(int a[],int left,int right)
{
int i,j,t
i=left,j=right+1
if(left<right){
while(1){
while(i+1<right+1&&a[++i]<a[left])
while(j-1>left-1&&a[--j]>a[left])
if(i>=j)break
t=a[i],a[i]=a[j],a[j]=t
}
t=a[left],a[left]=a[j],a[j]=t
sort(a,left,j-1)
sort(a,j+1,right)
}
}
int main()
{
int a,b[4],ma,mi,i
scanf("%d",&a)
for()
{
for(i=0i<4i++)b[i]=a%10,a/=10
sort(b,0,3)
ma=b[3]*1000+b[2]*100+b[1]*10+b[0]
mi=b[3]+b[2]*10+b[1]*100+b[0]*1000
a=ma-mi
printf("%d-%d=%d\n",ma,mi,a)
if(a==6174)break
}
return 0
}
用Java实现的打印5位数里面所有循环圈的程序如下:public class XunHuanQuan {
/**
* @param args 数字黑洞
*/
static int r=0
static int b[]=new int[16]
static int c[]=new int[5]
static int sort(int n,boolean boo) //排序函数
{
int i,j,sum=0,temp
int a[]=new int[5]
for(i=0i<5i++)
{
a[i]=n%10
n/=10
}
for(j=0j<4j++)
for(i=0i<4-ji++)
{
if(a[i]<a[i+1]&&boo)
{
temp=a[i]
a[i]=a[i+1]
a[i+1]=temp
}
if(a[i]>a[i+1]&&!boo)
{
temp=a[i]
a[i]=a[i+1]
a[i+1]=temp
}
}
for(i=0i<5i++)
sum+=a[i]*(int)Math.pow(10,4-i)
return sum
}
static boolean Boo(int d[])//判断函数
{
int n,t,q,i,j
boolean flag=true
for(i=0i<16i++)
for(j=i+1j<16j++)
if(b[i]==b[j])//判断是否有循环圈存在,只需要判断是否有相同的一个数出现2次就够了
{
d[0]=i
d[1]=j
n=j-i
for(q=0q<=rq++)
for(t=it<=jt++)
if(c[q]==b[t]) flag=false//用一维数组存放循环圈的一位数(任意一位都可以,这里选取第一位)
if(flag) c[r++]=b[i]//如果新生成的循环圈中的任何一位与原一维数组存放的值的不同 则再取循环圈的一位保存
return flag
}
return flag
}
public static void main(String[] args)
{
int n,m,w,t,p
int r=1
boolean flag=false
int d[]=new int[2]
for(m=10000m<100000m++)
{
n=m
for(p=0p<16p++)
{
w=sort(n,true)-sort(n,false)
b[p]=w
n=w
}
if(Boo(d))//输出不同的循环圈
{
System.out.printf("[")
for(t=d[0]t<d[1]-1t++)
System.out.printf("%d,",b[t])
System.out.printf("%d",b[t])
System.out.printf("]\n")
}
}
}
}
运行结果:
[74943,62964,71973,83952]
[63954,61974,82962,75933]
[53955,59994]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)