求一波9.15华为机试第二题查找积分对的思路或代码

有n个人参加某个项目比赛,每个人有两次机会,每个人参加项目后的得分x都被记录下来。如果成绩不达标,则会扣分,记得分可能为负数。所有人比赛完成后,得到2*n个积分,这些积分两两组合成n个积分对。有一个项目历史平均打分averageScore,现在将积分两两组合相加,希望所有积分对和都可以被平均得分averageScore整除。若可以组成这样的积分对时,请输出组合方案,若无法组成这样的积分对,请输出0。积分对输出时,请先输出积分对中较大的数。如averageScore=5的话,1 10 5 4 3 2 7 6 8 -1-》10 5 8 7 6 4 3 2 1 -1,不太清楚如何按数大小输出数组对,求各位大哥大姐指点一下😂😂#华为机试##华为#
全部评论
不知道理解的对不对,但建一个dictionary用数对中的较大数当key,再sort,应该可以
2 回复
分享
发布于 2021-09-20 11:52
不用排序吧,只跟模averageScore的大小有关。直接哈希完数数就行了
2 回复
分享
发布于 2021-09-20 15:18
百信银行
校招火热招聘中
官网直投
开局sort,从大到小,然后从第0个数开始配对,找出一对加起来可以组合成(A+B)能整除acerageScore的数对,然后依次找出来就行了,这种思路我A了95,不知道剩下的5咋回事儿
3 回复
分享
发布于 2021-09-20 14:09
整理了一下题目及题解,仅供参考,https://blog.csdn.net/weixin_41896265/article/details/120391528?utm_source=app&app_version=4.5.0
3 回复
分享
发布于 2021-09-20 16:16
没有样例测  😥
3 回复
分享
发布于 2021-09-20 17:06
华为9.8号不就结束机考了吗😢
点赞 回复
分享
发布于 2021-09-20 22:08
public static void findTheNum(Integer[] array,List<Integer> res,int currentIndex, int averageScore) {         if(isDone()){             output(res);             return;         }         int j;         for(int i =currentIndex;i<array.length;i++){             for(j=i+1;j<array.length;j++){                 if((array[i] + array[j]) % averageScore == 0 && flag[j] != 1 && flag[i] != 1){                     res.add(array[i]);                     res.add(array[j]);                     flag[j] = 1;                     flag[i] = 1;                     findTheNum(array, res, i + 1, averageScore);                     flag[j] = 0;                     flag[i] = 0;                     res.remove(array[i]);                     res.remove(array[j]);                 }             }         }     } 没有用例,好像正常dfs,bfs都行
点赞 回复
分享
发布于 2021-09-21 00:18
上面那个应该有点bug  改了一下😐
点赞 回复
分享
发布于 2021-09-22 10:10
又是我,欢迎找bug😂
点赞 回复
分享
发布于 2021-09-22 14:27

相关推荐

2 10 评论
分享
牛客网
牛客企业服务