华子机试20220330

第一题,只过了80,还有20不知道哪里没能过
import java.util.*;

public class Main1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        String[] arr = new String[n];
        for(int i = 0; i < n; i++){
            arr[i] = in.next();
        }
        int a = 0;
        int b = 0;
        for(String s : arr){
            if(s.equals("A"))a++;
            else b++;
        }
        int yushu = a % 4;
        int total = 0;
        if(yushu != 0){
            total = a / 4 + 1 + b;
        }
        else total = a / 4 + b;
        if(total > m){
            System.out.println(0);
            System.out.println(0);
        }
        else if(arr[arr.length - 1].equals("B")){
            System.out.println(total);
            System.out.println(1);
        }
        else if(arr[arr.length - 1].equals("A")){
            int k = yushu;
            int countB = 0;
            for(int i = arr.length - 1; i >= 0; i--){
                if(arr[i].equals("B")) countB++;
                else k--;
                if(k == 0) break;
            }
            System.out.println(total - countB);
            if(yushu == 0) System.out.println(4);
            else System.out.println(yushu);
        }
    }
}
第二题,A了,不过行列的英文想不起来了用拼音凑活了。。
import java.util.*;

public class Main2 {
    static int min = Integer.MAX_VALUE;
    static int total = 0;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        int s1 = in.nextInt();
        int s2 = in.nextInt();
        int e1 = in.nextInt();
        int e2 = in.nextInt();
        int[][] map = new int[m][n];
        map[e1][e2] = 2;
        int k = in.nextInt();
        int lake1 = 0;
        int lake2 = 0;
        for(int i = 0; i < k; i++){
            lake1 = in.nextInt();
            lake2 = in.nextInt();
            map[lake1][lake2] = 1;
        }
        dfs(map, s1, s2, 0);
        System.out.println(total + " " + min);
    }

    public static void dfs(int[][] map, int hang, int lie, int count){
        if(hang < 0 || hang >= map.length || lie < 0 || lie >= map[0].length || map[hang][lie] == 1) return;
        if(map[hang][lie] == 2){
            if(count > min) return;
            else if(count == min){
                total++;
                return;
            }
            else if(count < min){
                min = count;
                total = 1;
                return;
            }
        }
        count++;
        map[hang][lie] = 1;
        dfs(map, hang + 1, lie, count);
        dfs(map, hang - 1, lie, count);
        dfs(map, hang, lie + 1, count);
        dfs(map, hang, lie - 1, count);
        map[hang][lie] = 0;
        count--;
    }
}
第三题,写的稀烂,只过了70
import java.util.*;

public class Main3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String[] arr = str.substring(1, str.length() - 1).split(",");
        int flag = 0;
        for(int i = 0; i < arr.length; i++){
            for(int j = i + 1; j < arr.length; j++){
//                if(arr[i].equals(arr[j])) equal(arr, i, j);
                if (equal(arr, i, j) && (j * 2 + 1) < arr.length && !arr[j].equals("null")){
                    flag = 1;
                    List<String> list = new ArrayList<>();
                    con(arr, j, list);
                    String ans = "[";
                    for(String s : list){
                        ans += s;
                        ans += ",";
                    }
                    ans = ans.substring(0, ans.length() - 1);
                    ans += "]";
                    System.out.println(ans);
                    break;
                }
            }
            if(flag == 1)break;
        }
        if(flag == 0) System.out.println(-1);
    }

    public static boolean equal(String[] arr, int m, int n){
        if(n >= arr.length) return true;
        if(arr[m].equals(arr[n])){
            return equal(arr, m * 2 + 1, n * 2 + 1) && equal(arr, m * 2 + 2, n * 2 + 2);
        }
        return false;
    }

    public static void con(String[] arr, int j, List<String> list){
        if(j >= arr.length){
            return;
        }
        list.add(arr[j]);
        con(arr, j * 2 + 1, list);
        con(arr, j * 2 + 2, list);
    }
}




#华为机试##笔试题目##实习#
全部评论
请问是一般来讲,第一题字符串,第二题动态规划吗?
点赞 回复 分享
发布于 2022-03-31 16:49
题目描述可以补充一下么?
点赞 回复 分享
发布于 2022-04-03 14:56
题目大概什么意思呢
点赞 回复 分享
发布于 2022-04-06 18:49
这是od吗?啥岗位
点赞 回复 分享
发布于 2022-04-09 02:38

相关推荐

只写bug的程序媛:才15,我招行20多万,建设银行50多万,说放弃就放弃
点赞 评论 收藏
分享
目前感觉简历还有很多问题,希望各位能不吝赐教以及非常感谢这位老哥——@黑皮白袜臭脚体育生&nbsp;的项目,学完一遍感觉受益颇丰
小菜鸡只想转正:校友,我的建议是冗余的最好去掉,突出重点,比如985,211双一流的提示,专业技能调整到个人项目之后的位置。专业技能感觉写的太细了?占用篇幅最好腾出一点给项目经历,如果没写手机号和邮箱,记得加上。
点赞 评论 收藏
分享
评论
2
19
分享

创作者周榜

更多
牛客网
牛客企业服务