某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。比如:766431 - 134667 = 631764 就是具有这样特征的数字。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗? 请填写它重新排列数位后得到的最大数。
参考代码如下:
#include <stdio.h>
int sort(int a[], int n) //对六位数进行从大到小的排序
{
int i,j,temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if (a[i]>a[j])
{
temp=a[i],a[i]=a[j], a[j]=temp;
}
}
return 0;
}
int flag(int n) //对某六位数进行筛选 形式参数n为某六位数
{
int a[6],big,small,b[6];
int i,j;
for(i=0;i<6;i++)
{
a[i]=n%10; //各位分别送入到数组a[]中
n=n/10;
}
for(i=0;i<6;i++) //如果里面含有0则直接返回false
if(a[i]==0)
return 0;
sort(a,6); //对六位数进行从大到小的排序
big=small=0;
for(i=0;i<6;i++)
{
big=big*10+a[5-i]; //求最大
small=small*10+a[i]; //求最小
}
j=big-small; //求最大最小之差要求也是6位数
for(i=0;i<6;i++)
{
b[i]=j%10;
j=j/10;
}
sort(b,6);
for(i=0;i<6;i++)
{
if(a[i]!=b[i])
return 0;
}
return 1; // 1,0 在#define里面定义 对应true ,flase;
}
int main()
{
int num;
for(num=100000;num<1000000;num++)
//num=766431;
{
if (flag(num))
printf("%d\n",num);
}
return 0;
}