华为OD机试(2022/04/24)

第一题

因式分解:求素数乘积

输入一个数,求该数的素数乘积

输入:21

输出:3 7

第二题

括号的最大嵌套深度

输入一个仅由 "()[]{}" 组成的字符串,计算出有效的括号最大嵌套深度

输入:([]{()})

输出:3

第三题

第一行输入一个非负整数字符串,第二行输入一个整数n

输出从该字符串中取出n个字符后剩下的字符组成的最小的数(不改变字符顺序)

输入 :
2615371
4
输出:131

我的代码
不可否认,一直在凑用例通过率,最后400分通过
第一题

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 注意 hasNext 和 hasNextLine 的区别
    int n = sc.nextInt();
    long k = (long)Math.sqrt(n);
    int a = -1;
    int b = -1;
    for(int i=2;i<=k;i++){
        if(n%i==0 && isPrime(i) && isPrime(n/i)){
            a = i;
            b = n/i;
            break;
        }
    }
    System.out.println(a+" "+b);
}

private static boolean isPrime(int x){
    if(x<=1) return false;
    for(int i=2;i<=(long)Math.sqrt(x);i++){
        if(x%i==0){
            return false;
        }
    }
    return true;
}

第二题

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    int res = 0;
    int temp = 0;
    Stack<Character> stack = new Stack<>();
    for(int i=0;i<s.length();i++){
        Character c = s.charAt(i);
        if(c=='(') {
            stack.push(')');
            temp++;
            res = Math.max(res,temp);
        }else if(c=='[') {
            stack.push(']');
            temp++;
            res = Math.max(res,temp);
        }else if (c=='{') {
            stack.push('}');
            temp++;
            res = Math.max(res,temp);
        }else {
            if((c==')'||c==']'||c=='}')&&stack.size()>0){
                Character pop = stack.pop();
                if (pop==c){
                    temp--;
                }
            }
        }
    }
    if(temp!=0)res = 0;
    System.out.println(res);
}

第三题

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String num = sc.nextLine();
    int n = sc.nextInt();
    StringBuilder num1 = new StringBuilder(num);
    int start = 0;
    int m = num1.length()-n;
    StringBuilder sb = new StringBuilder();
    for(int i=1;i<=m;i++){
        if(num1.substring(start,n+i).contains("0")){
            sb.append(0);
            start = num1.indexOf("0")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }else if(num1.substring(start,n+i).contains("1")){
            sb.append(1);
            start = num1.indexOf("1")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }else if(num1.substring(start,n+i).contains("2")){
            sb.append(2);
            start = num1.indexOf("2")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("3")){
            sb.append(3);
            start = num1.indexOf("3")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("4")){
            sb.append(4);
            start = num1.indexOf("4")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("5")){
            sb.append(5);
            start = num1.indexOf("5")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("6")){
            sb.append(6);
            start = num1.indexOf("6")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("7")){
            sb.append(7);
            start = num1.indexOf("7")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("8")){
            sb.append(8);
            start = num1.indexOf("8")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("9")){
            sb.append(9);
            start = num1.indexOf("9")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
    }
    if(sb.length()<=0){
        System.out.println(0);
    }else{
        System.out.println(Long.valueOf(sb.toString()));
    }
}
#华为笔试##笔试题目##华为#
全部评论
请问这个是社招还是校招的题?
1 回复 分享
发布于 2022-05-07 23:44
第一题没想到 第二题,用栈,不断把左括号入栈出栈,更新最大长度 第三题,贪心,从左往右遍历,当前元素如果大于后一个元素就删除,否则就往后走;如果一遍没删完那就再来一遍,直到删除够k个数
点赞 回复 分享
发布于 2022-05-01 00:18
第一题不大会,笨办法 n=int(input()) def check(nums):     for i in range(2,int(nums**0.5)+1):         if nums%i==0:             return False     return True ans=[] for i in range(2,n+1):     if check(i)==True:         ans.append(i) result=[] for num in ans:     while  n%num==0:         n//=num         result.append(num) if n>1:     result,append(n) print(' &(5528)#39;.join(str(num) for num in result))
点赞 回复 分享
发布于 2022-05-01 00:34
感谢楼主分享,另礼貌借楼: 作者:cutey-none 链接:https://www.nowcoder.com/discuss/943950?source_id=profile_create_nctrack&channel=-1 来源:牛客网 【Java,C++,Web, Python,Go, 软测】  岗位的盆友们请戳👐👐👐(社招岗位): (快速安排机考(提供复习资料)!!-直达 华为面试!!!全程流程随时跟进可查): 【地点:东莞松山湖,西安,深圳,上海,武汉,成都,南京】 ☀️岗位: 华为OD( 华为预备役),各产品线各类语言开发岗位开放,只要你懂一门语言,就有合适的岗位!     虽然属于OD, 签约德科外企,但与 华为员工同工同酬(激励到位),工作稳定,工作内容相同(pl无差异分配任务) ⭐️管理:面试、绩效评定、均由 华为管理层进行,满一年即有名额转正 华为,转 华为的要求透明,量化,达到要求即可 ⭐️工作:接触并开发核心业务代码,技术栈全面,技术牛人多,技术氛围好,和互联网技术栈看齐 ☀️薪资丰厚:定级D1-D5,基本薪资+绩效+项目奖金+年终奖(年20w-40w) ☀️福利:和正式员工福利基本看齐,共享工位,免费夜宵,城际班车,欧洲园林式办公环境 ⭐️学历:全日制本科以上,学信网截图可证明(22届的 6月份后才可进流程,但也可私聊储备) ⭐️21届考公、考研等未就业者也可参与面试
点赞 回复 分享
发布于 2022-05-06 11:31
需要华为机试题库私聊
点赞 回复 分享
发布于 2022-05-08 21:33
so easy
点赞 回复 分享
发布于 2022-05-30 16:58
第1题是什么意思?就是把一个数拆成质数的乘积,比如180=2*2*3*3*5这样么?
点赞 回复 分享
发布于 2022-06-21 19:32

相关推荐

11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
15 84 评论
分享
牛客网
牛客企业服务