#include <cstdio> #include <cstring> #include <algorithm> using namespace std; char s[103]; int cnt, a[5], num[7], res[1003], tot; bool vis[11]; void dfs(int cur) { res[tot++] = cur; cur *= 10; for(int i = 0; i < cnt; ++i) { if(!vis[num[i]]) { vis[num[i]] = true; if(num[i] == 2) { vis[5] = true; } else if(num[i] == 5) { vis[2] = true; } else if(num[i] == 6) { vis[9] = true; } else if(num[i] == 9) { vis[6] = true; } dfs(cur + num[i]); vis[num[i]] = false; if(num[i] == 2) { vis[5] = false; } else if(num[i] == 5) { vis[2] = false; } else if(num[i] == 6) { vis[9] = false; } else if(num[i] == 9) { vis[6] = false; } } } } int solve() { if(strlen(s) != 5 || s[1] != ',' || s[3] != ',') { return -1; } cnt = tot = 0; memset(vis, false, sizeof(vis)); for(int i = 0; i < 3; ++i) { a[i] = s[i << 1] - '0'; if(a[i] <= 0 || a[i] > 9 || vis[a[i]]) { return -1; } else { vis[a[i]] = true; num[cnt++] = a[i]; if(a[i] == 2) { vis[5] = true; num[cnt++] = 5; } else if(a[i] == 5) { vis[2] = true; num[cnt++] = 2; } else if(a[i] == 6) { vis[9] = true; num[cnt++] = 9; } else if(a[i] == 9) { vis[6] = true; num[cnt++] = 6; } } } memset(vis, false, sizeof(vis)); dfs(0); sort(res, res + tot); if(tot < cnt) { return res[tot - 1]; } sort(a, a + 3); return res[a[2]];//因为最初放入了0,所以不用-1 } int main() { while(1 == scanf("%s", s)) { printf("%d\n", solve()); } return 0; } 我做的比较繁琐吧,坐等大神更简洁的代码
点赞 评论

相关推荐

牛客网
牛客企业服务