赞
踩
给定两个整数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"); }
有其他方法期待大家留言,一起加油
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。