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

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

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务