题目标题: 大小之差
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:________________
参考程序如下:
#include <stdio.h>
int exist[1000000]={0};
int sort(int a[], int n, int flag)
{
int i,j;
int sum=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
int temp;
if(flag==1)
{
if(a[i]>a[j])
{
temp=a[i];a[i]=a[j]; a[j]=temp;
}
}
else
{
if(a[i]<a[j])
{
temp=a[i];a[i]=a[j]; a[j]=temp;
}
}
}
}
for(i=0;i<n;i++)
sum=sum*10+a[i];
return sum;
}
int main()
{
int num;
int a[6];
for(num=999999;num>=100000; num--)
{
int temp=num;
int i=0;
int flag=0;
while(temp)
{
if(temp%10==0)
{
flag=1;
break;
}
a[i++]=temp%10;
temp=temp/10;
}
if (flag)
continue;
else
{
int diff=sort(a,6,0)-sort(a,6,1);
int b[6];
int j=0;
int var=diff;
if (var>100000)
{
while(var)
{
b[j++]=var%10;
var=var/10;
}
if((sort(b,6,1)==sort(a,6,1)) && (exist[sort(b,6,1)]==0))
{
printf("%d\n", num);
exist[sort(b,6,1)]=1;
}
}
}
}
return 0;
}