民生银行2022届总行“民芯计划”校园招聘笔试编程题答案

两道题都AC了,大佬们提点意见,看看怎么能更好地优化啊?
第一题,成绩单排序
public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        ArrayList<String>[] gradeList = new ArrayList[n];
        for(int i = 0;i < n;i++){
            gradeList[i] = new ArrayList<>();
            gradeList[i].add(in.next());
            int chinGrade = in.nextInt();
            int mathGrade = in.nextInt();
            int engGrade = in.nextInt();
            int sum = chinGrade + mathGrade + engGrade;
            gradeList[i].add(String.valueOf(sum));
            gradeList[i].add(String.valueOf(chinGrade));
            gradeList[i].add(String.valueOf(mathGrade));
            gradeList[i].add(String.valueOf(engGrade));
        }

        Arrays.sort(gradeList, new Comparator<ArrayList<String>>() { @Override public int compare(ArrayList<String> o1, ArrayList<String> o2) {
                if(Integer.parseInt(o2.get(1)) != Integer.parseInt(o1.get(1))){
                    return Integer.parseInt(o2.get(1)) - Integer.parseInt(o1.get(1));
                }else if(Integer.parseInt(o2.get(2)) != Integer.parseInt(o1.get(2))){
                    return Integer.parseInt(o2.get(2)) - Integer.parseInt(o1.get(2));
                }else if(Integer.parseInt(o2.get(3)) != Integer.parseInt(o1.get(3))){
                    return Integer.parseInt(o2.get(3)) - Integer.parseInt(o1.get(3));
                }else if(Integer.parseInt(o2.get(4)) != Integer.parseInt(o1.get(4))){
                    return Integer.parseInt(o2.get(4)) - Integer.parseInt(o1.get(4));
                }else{
                    int i = 0;
                    while(i < Math.min(o1.get(0).length(),o2.get(0).length())){
                        if(o1.get(0).charAt(i) == o2.get(0).charAt(i)){ i++; }
                        else{ break; }
                    }
                    return Character.compare(o1.get(0).charAt(i),o2.get(0).charAt(i));
                }

            }
        });

        int chinGrade = 0,mathGrade = 0,engGrade =0,sum=0;
        StringBuilder sb = new StringBuilder();
        int rank = 0;
        for(int i = 0; i < n;i++){
            if(sum != Integer.parseInt(gradeList[i].get(1)) ||
            chinGrade != Integer.parseInt(gradeList[i].get(2))||
            mathGrade != Integer.parseInt(gradeList[i].get(3))||
            engGrade != Integer.parseInt(gradeList[i].get(4))){
                rank = i + 1;
            }

            sb.append("rank:" + rank + " name:")
                    .append(gradeList[i].get(0)+" total:")
                    .append(gradeList[i].get(1)+ " chinese:")
                    .append(gradeList[i].get(2)+ " math:")
                    .append(gradeList[i].get(3)+ " english:")
                    .append(gradeList[i].get(4));
            System.out.println(sb);
            sb.delete(0,sb.length());
            sum = Integer.parseInt(gradeList[i].get(1));
            chinGrade = Integer.parseInt(gradeList[i].get(2));
            mathGrade = Integer.parseInt(gradeList[i].get(3));
            engGrade = Integer.parseInt(gradeList[i].get(4));
        }
    }
第二题,测试菜单程序
public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.next();
        if(s.charAt(0) == 'Q'){
            System.out.println("Quit");
        }
        else if(s.charAt(0) == '1'){
            int count = 0;
            while(in.hasNextLine()){
                s = in.nextLine();
                if(s.trim().length() != 0){ count++; }
            }
            System.out.println(count);
        }
        else{
            System.out.println("Wrong input, Please re-choose");
            System.out.println("Menu Function Test");
            System.out.println("1: Count Lines");
            System.out.println("Q: Quit");
        }
    }



#民生银行未来银行家##民生银行##Java##笔试题目#
全部评论
有题目吗,想做下
1 回复 分享
发布于 2021-06-27 08:45
第二题有问题吧,这里还是不能知道输入多少行结束,一直没有跳出while循环
点赞 回复 分享
发布于 2021-06-30 21:20
用C++怎么实现第二道题对于输入1计算行数的判断呢,getline方法不适用于空白行了,还是说我逻辑不对了呢,请求大佬指点😫
点赞 回复 分享
发布于 2021-06-27 12:00
我怎么记得第二题是输入其他字符后出现提示并且还要你再次输入别的呀,
点赞 回复 分享
发布于 2021-06-27 11:14
第一题我写了好久的内部类,只过了百分之80🤣 第二题没时间看题了,以为他会一直输入,直到输入Q,随便写了一个,过了40% 这次应该过不了
点赞 回复 分享
发布于 2021-06-27 00:19
rank相同的话,最后不用+1吗,如果不加1会出现1 2  2 3这样的排名吧
点赞 回复 分享
发布于 2021-06-26 22:34
感觉第一个没法再优化了,我用的priorityqueue,重写compare只能一直套if-else
点赞 回复 分享
发布于 2021-06-26 20:59
大佬们能不能帮我看看第一题为啥只对了20%,问题在哪😂 #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int main() { int num; cin >> num; vector<vector<string>>res(num, vector<string>(5)); for (int i = 0; i < num; i++) { string name; int chinese, math, english; cin >> name >> chinese >> math >> english; res[i][0] = to_string(chinese + math + english); res[i][4] = name; res[i][1] = to_string(chinese); res[i][2] = to_string(math); res[i][3] = to_string(english); } sort(res.rbegin(), res.rend()); //sort(res.begin(), res.end()); int i = 0;
点赞 回复 分享
发布于 2021-06-26 20:57
compareTo考了我三次,我三次不会😅
点赞 回复 分享
发布于 2021-06-26 20:52

相关推荐

||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
哇哇的菜鸡oc:他这不叫校招offer,而是实习offer
点赞 评论 收藏
分享
评论
6
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务