1 /* 2 题意:从前面找一个数字和末尾数字调换使得变成偶数且为最大 3 贪心:考虑两种情况:1. 有偶数且比末尾数字大(flag标记);2. 有偶数但都比末尾数字小(x位置标记) 4 仿照别人写的,再看自己的代码发现有清晰的思维是多重要 5 */ 6 #include7 #include 8 #include 9 #include 10 #include 11 #include
1 if (len == 1) 2 { 3 puts ("-1"); 4 } 5 else if (len == 2) 6 { 7 if ((s[0] - '0') % 2 != 0) puts ("-1"); 8 else 9 {10 printf ("%c%c\n", s[1], s[2]);11 }12 }13 else if (len == 3)14 {15 if ((s[1] - '0') % 2 == 0)16 {17 if ((s[0] - '0') % 2 == 0)18 {19 if (s[0] > s[1]) swap (s[0], s[2]);20 else swap (s[1], s[2]);21 printf ("%s\n", s);22 }23 else24 {25 swap (s[1], s[2]);26 printf ("%s\n", s);27 }28 }29 else if ((s[0] - '0') % 2 == 0)30 {31 swap (s[0], s[2]);32 printf ("%s\n", s);33 }34 else puts ("-1");35 }36 else37 {38 char ch = '0'; int x = -1;39 for (int i=len-2; i>=0; --i)40 {41 if ((s[i]-'0') % 2 == 0)42 {43 if (ch <= s[i])44 {45 if (ch == s[i])46 {47 if (s[i] < s[len-1])48 {49 ch = s[i]; x = i;50 }51 }52 else53 {54 ch = s[i]; x = i;55 }56 }57 }58 }59 if (x == -1) puts ("-1");60 else61 {62 swap (s[x], s[len-1]);63 printf ("%s\n", s);64 }65 }