大小之差
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
# include <iostream>
using namespace std;
int a,b,c,d,e,f;
int arr[6];
void f1()
{
arr[0] = a;
arr[1] = b;
arr[2] = c;
arr[3] = d;
arr[4] = e;
arr[5] = f;
}
int createNum()
{
return (arr[0]*100000 + arr[1]*10000 + arr[2]*1000 + arr[3]*100 + arr[4]*10 + arr[5]);
}
void sortMax()
{
int t;
for (int i = 0; i < 5; i++)
for (int j = i+1; j < 6; j++)
{
if (arr[i] < arr[j])
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
void sortMin()
{
int t;
for (int i = 0; i < 5; i++)
for (int j = i+1; j < 6; j++)
{
if (arr[i] > arr[j])
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
int search(int n)
{
for (int i=0; i<6; i++)
if (n == arr[i])
{
arr[i] = -1;
return 1;
}
return 0;
}
int compare(int val)
{
if (val == 0 || val < 100000)
return 0;
while (val)
{
if (search(val % 10) == 0)
return 0;
val = val / 10;
}
return 1;
}
int find(int xx[], int n, int max)
{
for (int i = 0; i < n; i++)
if (xx[i] == max)
return 1;
return 0;
}
int main(void)
{
int xx[40];
int i = 0;
int max, min;
for (a = 1; a <= 9; a++)
for (b = 1; b <= 9; b++)
for (c = 1; c <= 9; c++)
for (d = 1; d <= 9; d++)
for (e = 1; e <= 9; e++)
for (f = 1; f <= 9; f++)
{
f1();
sortMax();
max = createNum();
sortMin();
min = createNum();
if (compare(max-min))
{
if (find(xx, i, max) == 0)
{
xx[i++] = max;
printf("%d\n", max);
}
}
}
return 0;
}