360 3.6日笔试编程题

技术A卷,两道代码题,第一题36,第二题18,有无大佬分享一下。。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @ClassName: Test_360_1
 * @Description:
 * @author: LiuGe
 * @date: 2022/3/6
 */
public class Test_360_1 {

    public static void main(String[] args) {
        /**
         * 第一题
         * 现在的调查问卷越来越多了,所以出现了很多人恶意刷问卷的情况,已知某问卷需要填写名字,,
         * 则我们认为这个名字是真实有效的,否则就判定为恶意填写问卷。
         * 请你判断出由多少有效问卷(只要名字是真实有效的,就认为问卷有效
         *
         */
        // 如果名字仅由大小写英文字母组成且长度不超过10即为有效
        /**
         * 输入第一行包含一个正整数n,表示收到的问卷数量。(1<=n<=2000)
         * 接下来有n行,每行有一个由大小写英文字母,数字,下划线组成的字符串,分别表示一份问卷的名字,字符串长度不超过100。
         * 输出只有一个整数,表示有效问卷数量。
         */
        Scanner scanner = new Scanner(System.in);
        // 获取问卷数量和问卷名称
        int testCount = scanner.nextInt();
        // 对问卷数量进行控制
        if(testCount < 1 || testCount > 2000){
            System.exit(0);
        }
        List<String> inputStrings = new ArrayList<>();
        for(int i = 0;i < testCount;i++){
            String next = scanner.next();
            inputStrings.add(next);
        }
        // 用数组来存储是否合法
        boolean[] isLegal = new boolean[inputStrings.size()];
        int[] numbers = {0,1,2,3,4,5,6,7,8,9};
        // 赋予初值
        Arrays.fill(isLegal, false);
        // 开始校验
        for(int i = 0;i < inputStrings.size();i++){
            String inputString = inputStrings.get(i);
            // 1、首先判断长度
            if(inputString.length() > 100){
                isLegal[i] = false;
            }
            if(inputString.length() > 0 && inputString.length() <= 10){
                isLegal[i] = true;
            }else{
                continue;
            }
            // 2、看看是否包括数字和下划线
            for(int j = 0;j < inputString.length();j++){
                char sName = inputString.charAt(j);
                for(int k = 0;k < 10;k++){
                    if(sName == numbers[k]){
                       isLegal[i] = false;
                       break;
                    }
                }
            }
            if(inputString.contains("_")){
                isLegal[i] = false;
                continue;
            }
            // 3、接下来判断是否包含大小写英文字母
            String s = inputString.toUpperCase();
            for(int j = 0;j < s.length();j++){
                char sName = s.charAt(j);
                isLegal[i] = sName >= 65 && sName <= 97;
            }
        }
        // 统计满足要求的个数
        int resultCount = 0;
        for (boolean b : isLegal) {
            if (b) {
                resultCount++;
            }
        }
        System.out.println(resultCount);

    }
}
import java.util.*;

/**
 * @ClassName: Test_360_2
 * @Description:
 * @author: LiuGe
 * @date: 2022/3/6
 */
public class Test_360_2 {

    public static void main(String[] args) {
        /**
         * 第二题
         * 有n个黑白棋子,它们的一面是黑色,一面是白色。它们被排成一行,位置可以用标号1~n来表示。一开始,所有的棋子都是黑色向上,
         * 有q次操作,每次操作将位置标号在区间[L, R]内的所有棋子翻转(原来黑色变白色,原来白色变黑色)。
         * 请在每次操作后,求这n个棋子中,黑色向上的棋子个数。
         */

        /**
         * 输入:第一行两个整数 n, q,1 <= n <= 1018, q <= 300;后面q行,每行两个整数 L,R,1 <= L <=R <= n。
         * 输出:q行,每行一个整数,表示每次操作后黑色向上的棋子个数。
         */
        Scanner scanner = new Scanner(System.in);
        int chessCount = scanner.nextInt();
        int reverseCount = scanner.nextInt();
        // 校验输入参数
        if (chessCount > 1018 || chessCount < 1) {
            System.exit(0);
        }
        if (reverseCount > 300 || reverseCount < 0) {
            System.exit(0);
        }
        // 用数组来表示黑白棋子,其中0为白,1为黑,默认全为黑
        int[] chess = new int[chessCount];
        Arrays.fill(chess, 1);
        // 读取后几行的操作范围,并存储起来
        Map<Integer, Integer> LRMap = new HashMap<>();
        for (int i = 0; i < reverseCount; i++) {
            int L = scanner.nextInt();
            int R = scanner.nextInt();
            if (L > R) {
                System.exit(0);
            }
            if (L < 1 || L > chessCount) {
                System.exit(0);
            }
            if (R > chessCount) {
                System.exit(0);
            }
            LRMap.put(L, R);
        }
        // 翻转棋子
        Set<Integer> LRKeys = LRMap.keySet();
        int blackCount;
        for (Integer L : LRKeys) {
            blackCount = 0;
            Integer R = LRMap.get(L);
            // 翻转[L,R]的棋子
            for (int i = L - 1; i < R; i++) {
                chess[i] = (chess[i] + 1) % 2;
            }

            // 翻转结束后输出黑色向上的个数
            for (int i = 0; i < chessCount; i++) {
                if (chess[i] == 1) {
                    blackCount++;
                }
            }
            System.out.println(blackCount);
        }
    }
}





#360春招##360公司##笔经#
全部评论
第一题大一期末考试题难度没啥说的,第二题差分一下就行
1
送花
回复
分享
发布于 2022-03-06 20:48
黑白棋用的布尔数组,暴力挨个反转a了45
点赞
送花
回复
分享
发布于 2022-03-06 17:50
秋招专场
校招火热招聘中
官网直投
老哥为什么我的本地能运行,360平台就运行不了呀
点赞
送花
回复
分享
发布于 2022-03-06 17:53
老哥你是按照这个格式运行的吗
点赞
送花
回复
分享
发布于 2022-03-06 17:53
第一题写的也太复杂了,怎么能写这么多的
点赞
送花
回复
分享
发布于 2022-03-06 18:00
老哥,你能把提交到平台的代码给我看看嘛,我今天提交,本地可以运行360平台提交直接报编译异常
点赞
送花
回复
分享
发布于 2022-03-06 18:07

相关推荐

6 11 评论
分享
牛客网
牛客企业服务