华为机试---凉经

第一道题-幼儿园排班:

* 幼儿园小朋友排班,每个小朋友都有编号由0-999,且小朋友只知道自己跟前一个小朋友是不是一个班的
* 如: 1/N 2/Y 3/N 4/Y
* 输出 1  2
*      3  4
* 输出结果要编号排序输出,输出所有班级组合

* 1/N 2/Y 3/N 4/Y 5/N 6/N 7/Y
* 7/Y 3/N 2/Y 12/N 11/N 4/Y
* 2/Y 1/Y 3/N 234/N 45/N 11/Y

这道题考试的时候脑袋很乱,有些条件没考虑清楚,最后只有20%通过率,但是考完后复盘了一下应该没问题。 不过没办法提交了,哭死。。。
代码如下:

public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        String line = s.nextLine();
        String[] str = line.split("\\s");
//        System.out.println(Arrays.toString(str));
        ArrayList list = new ArrayList();
        for (String s1 : str) {
            list.add(s1);
        }
        System.out.println(list);
        ArrayList  res = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            String s1 = list.get(i);
            String[] split = s1.split("\\W");
            if (split.length  999){
                System.out.println("ERROR");
                return;
            }
            if (i+1 < list.size()){
                String resStr = split[0];
                // 找同组
                for (int j = i+1; j < list.size(); j++) {
                    list.size();
                    String s2 = list.get(j);
                    if (s2.contains("Y")) {
                        resStr = resStr + " " + s2.split("\\W")[0];
                        i = j;
                    } else {
                        break;
                    }
                }
                res.add(resStr);
            }
        }
          //对结果进行排序
        List collect = res.stream().sorted((s1, s2) -> Integer.compare(Integer.valueOf(s1.split(" ")[0]),Integer.valueOf(s2.split(" ")[0]))).collect(Collectors.toList());
        for (String re : collect) {
            String[] resList = re.split(" ");
            Arrays.sort(resList);//输出时要按照顺序输出
            for (String s1 : resList) {
                System.out.print(s1+" ");
            }
            System.out.println("");
        }
    }

第二道题-全勤奖

缺勤问题 有:absent 、late 、leaveearly、present 四个状态
1.缺勤不能超过一次
2.不能连续的迟到或早退
3.任意连续七天,缺勤/迟到/早退次数 不超过3次

    输入: 可拿全勤就输出true,不可以就输出false
    2 //要计算的字符串
    present
    present late present absent present leaveearly present present present late present late present present leaveearly
    present present present absent present leaveearly present late present present present late present present leaveearly

    true
    false

    通过率 25%

这道题是我最疑惑的一道题,规则说的比较含糊,我的处理已经很详细了,但是我也不知道是哪里出了问题通过率就是只有25%。目前还没有找到原因,我自测的数据都是符合要求的。有大佬看明白问题的话迫切的希望可以指点我一下,代码如下

public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        String count = s.nextLine();
        int counti = Integer.valueOf(count);
        String absent = "absent"; //缺勤
        String late = "late"; // 迟到
        String leaveearly = "leaveearly"; // 早退
        while (counti > 0){
            String line = s.nextLine();
            String[] split = line.split("\\s");
            List dayList = new ArrayList(Arrays.asList(split));
            boolean hasAbsent = false;
            int absentCount = 0;
            boolean islianxu = false;
            int fail = 0;
            for (int i = 0; i < dayList.size(); i++) {
                if (absent.equals(dayList.get(i))){
                    hasAbsent = true;
                    absentCount++;
                    fail++;
                }
                if (late.equals(dayList.get(i))||leaveearly.equals(dayList.get(i))){
                    fail++;
                }
                if (i > 0){
                  // 是否有连续 早退/迟到
                    String s1 = dayList.get(i);
                    String s2 = dayList.get(i-1);
                    if ((late.equals(s1) || leaveearly.equals(s1)) &&(late.equals(s2) || leaveearly.equals(s2))){
                        islianxu = true;
                    }
                }
            }
            //System.out.println("hasAbsent = "+hasAbsent);
            //System.out.println("islianxu = "+islianxu);
            //System.out.println("fail = "+fail);

            if (dayList.size() < 7){
                // 如果小于7,则查看 缺勤和连续,失败是否大于3
                if (!(hasAbsent || islianxu || fail <= 3)){
                    System.out.print(false+" ");
                }else{
                    System.out.print(true+" ");
                }
            }else {
                  // 如果缺勤次数大于1,或者存在连续早退/迟到则失败
                if (absentCount > 1 || islianxu){
                    System.out.print(false+" ");
                }else {
                    //最多有几次缺勤/早退/迟到
                    int c = (dayList.size() / 7)*3;
                    if (c <= fail){
                        System.out.print(false+" ");
                    }else {
                        //每连续七次考勤不超过3次
                        int[] dp = new int[dayList.size()];
                        for (int i = 0; i < dayList.size(); i++) {
                            int fc = 0;
                            for (int j = 0; j < 7; j++) {
                                if (i+j < dayList.size()) {
                                    String s1 = dayList.get(i+j);
                                    if (s1.equals(absent)||s1.equals(late)||s1.equals(leaveearly)){
                                        fc++;
                                    }
                                }
                            }
                            dp[i] = fc;
                        }
                        //System.out.println("dp[]="+Arrays.toString(dp));
                        for (int i : dp) {
                            if (i > 3){
                                System.out.println(false+" ");
                                return;
                            }
                        }
                        System.out.println(true+" ");
                    }
                }
            }
            counti--;
        }
    }
#华为机试##笔试题目##笔经##Java##社招##题解##求内推#
全部评论
需要华为机试题库私聊
1 回复 分享
发布于 2022-05-08 22:11
第一道题我只有70% 的通过率;好难;
点赞 回复 分享
发布于 2022-06-13 22:03
为什么就是没法100。第三题不就是个01背包????
点赞 回复 分享
发布于 2022-04-27 21:21
内存管理加座位加递归次数,凉凉路过😭
点赞 回复 分享
发布于 2022-04-27 21:20
我也跟你不一样,我题目是买水果和字符串替换
点赞 回复 分享
发布于 2022-04-27 21:18
祝楼主早日拿Offer,礼貌借楼~🤗。 【华为OD招聘】: 岗位:研发 / 测试 / 算法 / 大数据语言:java/web/python/c/c++/JS/go 地域:东莞、深圳、西安、武汉、成都、上海等。岗位多多,可私聊我~ 【说明】: 1、面试、绩效评定、均由华为管理层进行,满一年即有名额转正华为,转华为的要求透明,量化,达到要求即可, 2、接触并开发核心业务代码(非边缘代码!),技术栈全面,技术牛人多,技术氛围好,和互联网技术栈看齐 3、基本工资+绩效工资+年终奖+华为办公环境+带薪年假,与华为员工同工同酬,pl 无区别分配任务
点赞 回复 分享
发布于 2022-04-27 21:11
今天的?我咋跟你考得不一样咧
点赞 回复 分享
发布于 2022-04-27 21:10
各位大佬帮我看看第二题吧😥
点赞 回复 分享
发布于 2022-04-27 21:10

相关推荐

头像
01-22 10:36
已编辑
牛客运营
活动规则:你可以使用任何AI工具,生成牛客娘表情包,发送你的生成提示词+图片至本贴评论区,并将无水印原图发送至微信群。活动奖励:1、每张&nbsp;可爱的牛客娘表情包,可获得&nbsp;10牛币奖励(每人上限100张)&nbsp;~2、点赞量最高的前xx个评论,送牛客娘马克杯,(每25个评论,赠送一个马克杯,最多赠送20个)牛客娘表情包交流群:生成示例:&nbsp;这是牛客娘的形象,帮我用牛客娘的形象画一些ACM算法竞赛相关的表情包&nbsp;需要的表情包有:&nbsp;摸头&nbsp;(安慰)&nbsp;呵呵(冷笑的呵呵)&nbsp;牛魔&nbsp;牛啤(左手比大拇指,右手拿着啤酒)&nbsp;这次一定&nbsp;比心&nbsp;不许TD&nbsp;要给他迎头痛击&nbsp;设计要求:&nbsp;1.统一使用萌系风格。&nbsp;2.表情生动和肢体动作丰富、...
Xuan2333:没错没错就是我,牛客娘表情包的创作者,大家都可以自用哒awa (第5张“按住牛客娘开始思索”出自我的世界里的机械动力模组,我做这个表情包可是花了我1个多小时的时间啊qwq) 最后附上所有用过的素材图,希望大家喜欢awa wow 将图片中的人物改成两手托腮,只显示头部照片,眼睛为星星眼,表情开心,并在下方附上文字“wow” Ciallo 将第二张图的人物做出第一张图的姿势并且要在身体各处还有五官和动作完全一致,不要改背景,高分辨率,最佳质量,并在下方加上和图片相符的文字“Ciallo!” 说不出话 生成这个任务面无表情,一脸犹豫,嘴角下垂,双手交叉在胸前,在中间加上一个带有一条斜杠的麦克风的表示闭麦的符号,并且在下面配上文字“说不出话” 按住牛客娘开始思索 将第二张图的人物进行修改,要求是有一只手按在人物的头上,人物的眼神灵动,手略有着急的轻微摆起,头部微微抬起,并将第一张图放在第二张图的下方,高品质,把这张图的下方的黑色部分加上文字“按住牛客娘开始思索”,字体与图片里展示的“牛客娘”这三个字的字体相一致 我也要WA吗 将第一张图的人物的头发,脸部和衣服改成第二张图的人物的,眼睛保持不变,脸上的汗保持不变,头发的长度修改为和图片的一致,脸上不要有红晕,眼睛里不要有高光,眼睛里只要纯灰色查看图片
点赞 评论 收藏
分享
评论
2
18
分享

创作者周榜

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