第二届传智杯复盘 Java(自闭)代码

文章目录

    • 软件工程实习:
    • 程序员节发橙子
    • 众数出现的次数

软件工程实习:

题目描述:
某大学的《软件工程》必修课分为理论和实践部分。理论部分由该校教授完成授课;而实践部分是由第三方的公司主导,需要同学们在五周时间内自学 HTML、css、JavaScript、vue、Python、django 等技术,并组队完成一个真实的互联 商业应用。
参与这个课程的有 n(0≤n≤1000) 个学生,分成了不超过 26 个队伍,每个队伍用 A 到 Z 来表示。每个队伍都会完成一个项目,并以队伍为单位,给所有队伍(包括自己队伍)打分,范围是 0 到 100 的整数。
为了平息学生对这门课产生的出多问题的不满(比如工作量太大、时间过于紧张、考核方式不公平等),老师决定使用一种“看起来”很公平的方式来决定每组队伍的项目得分:
对于某个队伍,首先计算所有队伍(包括自己)给这个队伍评分的平均值,然后剔除掉和这个平均值差别超过 15 分的评分(保证不会出现所有的评分全部被剔除的情况),最后再对剩余的评分求平均值,四舍五入取整后作为这个队伍的项目得分。
对于每一个同学,我们已经得知他们的队伍代 和理论成绩(也是 0 到 100 分的整数)。这位同学的最后得分就是 60% 的理论成绩加上 40% 的所在队伍的项目得分,然后四舍五入取整。
现在老师想知道所有同学的分数排行。请按最后得分从高到低的顺序,输出每位同学的得分和他所在的队伍。
输入格式:

程序员节发橙子

题目描述:

错误思想:
这个题我的想法居然是找出最小成绩的那个同学,然后以他为标准,分别向两边去扩散,殊不知这个是完全错误的。
当然对于样例是没一点毛病
样例:
5
3 4 5 4 3
输出 9 // 1 2 3 2 1 没一点毛病
当时如果是 6 1 9 7 6
这种思想的话给的橘子数为 : 2 1 2 1 0
居然出现0了!

正确的思想是:
(1)我们先假设每个人先发一个橘子,因为每个人至少要收到一个橘子
(2)从左到右扫描一遍,然后如果右边的成绩比左边的大,不用说这个人分的橘子数肯定是左边那个人+1,我们不要在这个时候判断右边比左边小的,因为这个可能会导致出现负数。
(3)最后从右向左扫描一遍,如果左边比右边大的话,a[i-1] = max(a[i-1],a[i]+1)相等的话:
a[i-1] = max(a[i-1],a[i]) 相信也挺好理解的

代码:

package 传智杯第二届;import java.io.*;public class Test2 {	static int n;	static int a[] = new int[1000010];	static int num[] = new int[1000010];	public static void main(String[] args) throws IOException{		StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));		PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));		re.nextToken(); n = (int)re.nval;		long ans = 0;		for(int i = 1; i  n;i++){			re.nextToken();			a[i] = (int)re.nval;		}		for(int i = 1;i  n;i++){			if(a[i]  a[i+1])				num[i+1] = num[i]+1;			else if(a[i] == a[i+1])				num[i+1] = num[i];		}		for(int i = n;i > 1;i--){			if(a

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月11日
下一篇 2020年3月11日

相关推荐