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

版权声明:感谢来访!欢迎指导、勘误、讨论及转载,转载请注明出处 https://blog.csdn.net/u011489043/article/details/80184972

题目描述:队友争吵

image

image

思路:

  感觉像是找规律题:因为最左的一个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);
    }
}

  或者一行实现:

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);
    }
}

题目描述:球赛

image

image

思路:

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

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

代码实现:

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]);
        }
    }
}

题目描述:课程冲突

image

思路:

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

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

扫描二维码关注公众号,回复: 4480404 查看本文章

  但要注意题目要求按时间顺序输出,所以就需要使用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");
            }
        }
    }
}

—–乐于分享,共同进步,欢迎补充
—–Any comments greatly appreciated
—–诚心欢迎各位交流讨论!QQ:1138517609

猜你喜欢

转载自blog.csdn.net/u011489043/article/details/80184972
今日推荐