题目标题: 大小之差
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431- 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:___995544_____________
请通过浏览器提交答案。
注意:只提交另一个6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
#include "iostream.h"
#include <stdlib.h>
#include <ctime>
int comper(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}//comper 从小到大排
void shuzu(int m, int &max, int &min)
{
int k = 0;
int a[6] = {0};
for(k = 0; k < 6; k++) {
a[k] = m%10;
m = m/10;
if(a[k] == 0) break; // 进入i+1
}//for 将数字变成数组
qsort(a, 6, sizeof(int), comper); //排序
int p = 1;
for( k = 0; k < 6; k++) {
max += a[k]*p;
min += a[5-k]*p;
p *= 10;
}//for 将数组变为数字
}//shuzu
int main()
{
clock_t start, finish;
double totaltime;
start = clock();
int max = 0, min = 0, m = 0, flag = 100, j = 0;
int s[1000] = {0};
for(int i = 111111; i <= 999999; i++) {
max = 0; min = 0;
shuzu(i, max, min);
if(max%10 == 0)
continue;
m = max - min;
int max1=0,min1=0;
shuzu(m, max1, min1);
if(min1 == min){
s[j++] = max;
for(int k = 0; k < j-1; k++){
if(s[j-1] == s[k]) { // 《 j-1 去掉自己
s[j-1] = 0;
j--;
}
}//for
//cout << max << endl;
}//if
}//for
for(int k = 0; k < j; k++){
cout << s[k] <<endl;
}//for
finish = clock();
totaltime = (double)(finish-start);
cout<<totaltime<<endl;
return 0;
}//main