科大讯飞2017秋招笔试编程题 ----转载

https://blog.csdn.net/u011489043/article/details/80184972

题目描述:队友争吵

思路:

  感觉像是找规律题:因为最左的一个LL、最右的一个R永远不会被消去,所以我们需要做的就是最后一个L的位置减去第一个R的位置就是消去的人数。

代码实现:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	String queue = sc.next();
	int lCount = 0, rCount = queue.length() - 1, count = 0;
	for (int i = 0; i < queue.length(); i++) {
		if (queue.charAt(i) == 'R')//找到第一个R
			break;
		lCount++;
	}
	for (int j = queue.length() - 1; j >= 0; j--) {
		if (queue.charAt(j) == 'L')//找到最后一个L
			break;
		rCount--;
	}
	System.out.println(lCount + " " + rCount);
	count = queue.length() - (rCount - lCount);
	if (count > queue.length())
		count = queue.length();
	System.out.println(count);
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

  或者一行实现:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	String queue = sc.next();
	int count = 0;
	count = queue.length() - (queue.lastIndexOf("L") - queue.indexOf("R"));
	System.out.println(count);
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

题目描述:球赛

思路:

  整体来说,可能大家思路都比较清晰,麻烦的就是输入,然后对输入的拆分处理是关键。

  尤其注意最终排名的要求:首先按积分,积分相同按净胜球,再相同按进球数。所以在写排序函数的时候需要注意。

代码实现:

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeMap;

public class laoxu {
class Team {
String name;
int grade;
int realwin;
int in;

	public Team(String name, int grade, int realwin, int in) {
		this.name = name;
		this.grade = grade;
		this.realwin = realwin;
		this.in = in;
	}

	public void setGrade(int grade) {
		this.grade = grade;
	}

	public void setRealwin(int realwin) {
		this.realwin = realwin;
	}

	public void setIn(int in) {
		this.in = in;
	}
}

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	laoxu main = new laoxu();
	while (sc.hasNext()) {
		String ns = sc.nextLine();
		int n = Integer.valueOf(ns);
		Team[] win = new Team[n];// n支球队的名字
		TreeMap<String, Team> map = new TreeMap<>();
		for (int i = 0; i < n; i++) {
			String cname = sc.nextLine();
			Team team = main.new Team(cname, 0, 0, 0);
			map.put(cname, team);
		}
		int len = (n * (n - 1)) / 2;// 对所有的比赛结果进行处理
		for (int i = 0; i < len; i++) {
			// 以空格分为对战球队str[0]和比分str[1]分别进行处理
			// A-B 1:2
			String[] str = sc.nextLine().split(" ");
			String[] name = str[0].split("-");
			String cname1 = name[0];// A
			String cname2 = name[1];// B
			String[] grad = str[1].split(":");
			int c1 = Integer.valueOf(grad[0]);// 1
			int c2 = Integer.valueOf(grad[1]);// 2
			int c = c1 - c2;// 比分差距,用于计算净胜球
			int grade1 = 0;// 得分 3 1 0
			int realwin1 = 0;// 净胜球数
			int in1 = c1;// 进球数
			int grade2 = 0;
			int realwin2 = 0;
			int in2 = c2;
			if (c == 0) {// 平局
				grade1 = 1;
				grade2 = 1;
			}
			if (c > 0) {
				grade1 = 3;
				realwin1 = c;
			}
			if (c < 0) {
				grade2 = 3;
				realwin2 = c2 - c1;
			}
			//设置得分、净胜球数、进球数
			Team team = map.get(cname1);
			team.setGrade(team.grade + grade1);
			team.setIn(team.in + in1);
			team.setRealwin(team.realwin + realwin1);
			map.put(cname1, team);
			
			Team team2 = map.get(cname2);
			team2.setGrade(team2.grade + grade2);
			team2.setIn(team2.in + in2);
			team2.setRealwin(team2.realwin + realwin2);
			map.put(cname2, team2);
		}
		int i = 0;
		for (String key : map.keySet()) {
			win[i++] = map.get(key);
		}
		//自定义排序比较器。排序规则:
		//首先按照积分,其次净胜球,最后进球数
		Arrays.sort(win, new Comparator<Team>() {
			public int compare(Team o1, Team o2) {
				int grade = o2.grade - o1.grade;
				int realwin = o2.realwin - o1.realwin;
				int in = o2.in - o1.in;
				if (grade != 0)
					return grade;
				else if (realwin != 0)
					return realwin;
				else
					return in;
			}
		});
		String[] name = new String[n / 2];
		for (i = 0; i < n / 2; i++)
			name[i] = win[i].name;
		Arrays.sort(name);//对球队名字按字典序输出
		for (i = 0; i < n / 2; i++)
			System.out.println(name[i]);
	}
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116

题目描述:课程冲突

思路:

  很简单,利用map的键值对特性,键存储时间信息,值存储对应时间的课程信息;因为考虑到同一时间可能有多门课程(即冲突)的情况,所以值用ArrayList来存储。

  处理完后,遍历map,找出相应时间的list的大小(也就是同一时间有几门课),如果大于1,说明有冲突;如果都没有,则输出“YES”。

  但要注意题目要求按时间顺序输出,所以就需要使用TreeMap了。

代码实现:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	Map<String, List<String>> map = new TreeMap<String, List<String>>();
	int n = sc.nextInt();
	for (int i = 0; i < n; i++) {
		String time = sc.next(), code = sc.next();
		if (!map.containsKey(time))
			map.put(time, new ArrayList<String>());
		map.get(time).add(code);
	}
	for (String time : map.keySet()) {
		if (map.get(time).size() > 1) {
			System.out.printf(time);
			for (String code : map.get(time))
				System.out.printf(" " + code);
			System.out.printf("\n");
		}
	}
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

------至所有正在努力奋斗的程序猿们!加油!!
有码走遍天下 无码寸步难行
1024 - 梦想,永不止步!
爱编程 不爱Bug
爱加班 不爱黑眼圈
固执 但不偏执
疯狂 但不疯癫
生活里的菜鸟
工作中的大神
身怀宝藏,一心憧憬星辰大海
追求极致,目标始于高山之巅
一群怀揣好奇,梦想改变世界的孩子
一群追日逐浪,正在改变世界的极客
你们用最美的语言,诠释着科技的力量
你们用极速的创新,引领着时代的变迁

——乐于分享,共同进步,欢迎补充
——Any comments greatly appreciated
——诚心欢迎各位交流讨论!QQ:1138517609
——CSDN:https://blog.csdn.net/u011489043
——简书:https://www.jianshu.com/u/4968682d58d1
——GitHub:https://github.com/selfconzrr

        

你可能感兴趣的:(jv)