给定两个整数a和b(保证所有数据不包含前导0),现在你可交换a里面任意两个数字,得到一个新的a,使得a为小于等于b的最大整数,例如给定a:1234,b:5555,得到4321。如果找不到小于等于b的最大a,则输出-1。(输出也必须保证不包含前导0,例如0123是不合法输出)。
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 1000
int MAX(int a)
{
int i = 1, n = 0, temp, min;
int b[N];
while (a != 0)
{
b[i] = a % 10;
a = a / 10;
i++;
n++;
}
for (i = 1; i <= n / 2; i++)
{
temp = b[i];
b[i] = b[n + 1 - i];
b[n + 1 - i] = temp;
}
for (i = 2, min = b[1]; i <= n; i++)
{
min = (min < b[i]) ? min : b[i];
}
for (i = 1; i <= n; i++)
{
if (b[i] == min)
{
temp = b[1];
b[1] = b[i];
b[i] = temp;
}
}
for (i = 3, min = b[2]; i <= n; i++)
{
min = (min < b[i]) ? min : b[i];
}
for (i = 2; i <= n; i++)
{
if (b[i] == min)
{
temp = b[2];
b[2] = b[i];
b[i] = temp;
}
}
if (b[1] == 0)
{
temp = b[1];
b[1] = b[2];
b[2] = temp;
}
i = 1, min = 0, temp = n;
while (n != 0 && i <= temp)
{
min += b[i] * pow(10,n-1);
n--;
i++;
}
return min;
}
void main()
{
int a, b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
a = MAX(a);
if (a <= b)
printf("%d\n", a);
else printf("-1\n");
}
有其他方法期待大家留言,一起加油