改试卷(美团点评)
来源:互联网 发布:java软件工程师怎么考 编辑:程序博客网 时间:2024/04/29 01:24
题目描述
学生分为n组,每个组si个人,老师收取第一组所有试卷,发给第二组同学,同时收取第二组同学的试卷放在手中试卷的底下………一直到收取最后一组试卷,再将手中试卷发给第一组学生。
这样存在两个问题:1,手中试卷不够发给下一组同学的;2,有的同学改自己的试卷
这两个问题与老师收取试卷的顺序有一定关系,你能否设计老师收取试卷的顺序从而避免上述两个问题,若存在一定顺序,输出“Yes”,否则,输出“No”。
输入:
第一行:分组个数
第二行:每个组的学生数
输出:
能满足条件:Yes
不能满足条件:No
输入样例:
220 1041 3 2 3
输出样例:
NoYes
tips:样例2的顺序为3 3 1 2 时就可以避免这两个问题。
分析过程
首先,来看一个会分配失败的案例,我们先排个序,按照卷子多的先入队:
也就是说,如果卷子最多的那一组,比其他所有组卷子总和加起来还要多的话,那就肯定发卷失败,多的那一组发卷子到最后会遇到自己组的卷子。所以,判定条件就是:
当然还有些边界条件需要注意,比如只有两组的话,这两组卷子数目肯定要一样才行。
解题代码
#include <iostream>#include <algorithm>using namespace std;void showArr(int a[], int n){ cout << "arr :[ "; for (int i = 0; i < n; i++) cout << a[i] << " "; cout << "]" << endl;}int main(){ int n; while (cin >> n){ // 异常处理 if (n <= 0){ cout << "输入的n有误,请重新输入:" << endl; continue; } int *s = new int[n]; for (int i = 0; i < n; i++){ cin >> s[i]; } // 排序 sort(s, s + n); showArr(s, n); if (n == 2 && s[0] == s[1]) cout << "Yes" << endl; else if (n == 2 && s[0] != s[1] || n == 1){ cout << "No" << endl; } else { int sum = 0; for (int i = 0; i < n - 1; i++) sum += s[i]; if (sum < s[n - 1]) cout << "No" << endl; else cout << "Yes" << endl; } } return EXIT_SUCCESS;}
结果:
77 2 3 2 9 1 10arr :[ 1 2 2 3 7 9 10 ]Yes
阅读全文
0 0
- 改试卷(美团点评)
- 美团点评——改试卷
- 老师分试卷 美团点评2018提前批笔试题 -- JAVA 进阶
- 美团点评2017年秋招笔试题 改考卷
- leetcode 圆桌红包(美团点评)
- 最小排序(美团点评)
- 改试卷
- 美团点评编程题
- 美团点评面试有感
- 美团点评面经
- 美团-大众点评-春招面经
- 美团点评前端面试
- 美团点评面试题
- 2017美团点评Code
- 美团点评笔试题
- 美团点评后台开发实习记(持续更新)
- 嗯哼~2017美团点评前端面试(一年工作经验)
- 深入FFM原理与实践(美团点评技术)
- 排序算法——插入排序
- leetcode 657. Judge Route Circle
- Python中的堆栈、队列、链表
- EL表达式
- OpenGL学习笔记之摄像机跟随
- 改试卷(美团点评)
- CLOB
- 反射
- 前端面试!
- [容易] UVa OJ 11059 Maximum product 简单枚举
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- 红黑树
- Sql Server 2012 存储过程的单步调试
- 前端面试系列之---javascript基础和数据类型