华为笔试第二题到底什么意思???????

我后来把69 52进行互换 通过率50升到了70 这题到底什么意思? 有做出来的大神说一下吗?????很难受#华为#
全部评论
最后的输出,2和5不能同时出现,6和9不能同时出现。
点赞 回复 分享
发布于 2017-04-07 21:55
你是怎么换的,直接相互替换的吗?
点赞 回复 分享
发布于 2017-04-07 21:55
#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; } 我做的比较繁琐吧,坐等大神更简洁的代码
点赞 回复 分享
发布于 2017-04-07 22:26

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务