华为20180815笔试题分享

第一题就不给答案了。


import java.util.Scanner;

public class Main {
    static int[] count = new int[8];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean flag = true;
        while (flag&&sc.hasNext()){
            String s = sc.nextLine();
            if (s.equals("-1,-1"))
                flag = false;
            else
                getRes(s);
        }
        for (int i=0;i<count.length;i++){
            System.out.println("["+(i+12)+","+(i+12+1)+")"+":"+count[i]);
        }
    }

    private static void getRes(String s){
        String[] sentence = s.split(",");
        int start = Integer.parseInt(sentence[0])-12;
        if (start<0)
            start=0;
        int end = Integer.parseInt(sentence[1])-12;
        if (end>8)
            end=8;
        while (start<end){
            count[start]++;
            start++;
        }
    }
}



题目有错误。。
(+ (* 2 3) (^ 4))(2 3) 结果应该为 11
import java.util.*;

public class Main {
    // 只通过80%
    // (+ (* 2 3) (^ 4))
    // (+ (* 2 3) (^ 4))(2 3)
    // ((+ 2 3)
    // ((+ 2 3))
    // (^ (+ (* 2 3) (^ ((^ 4)))))
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String express = scanner.nextLine();

        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < express.length(); i++) {
            char c = express.charAt(i);
            if (c == ')') {
                StringBuilder builder = new StringBuilder();
                char top;
                while (!stack.empty() &&(top = stack.pop()) != '(') {
                    builder.append(top);
                }

                String currExp = builder.reverse().toString();
//                System.out.println(currExp);

                String[] ops = currExp.split(" ");
                if (ops.length == 2) {
                    int value = Integer.valueOf(ops[1]);
                    value++;
                    String count = String.valueOf(value);
                    for (int j = 0; j < count.length(); j++) {
                        stack.push(count.charAt(j));
                    }
                } else if (ops.length == 3) {
                    int a = Integer.valueOf(ops[1]);
                    int b = Integer.valueOf(ops[2]);
                    int value = 0;
                    switch (ops[0]) {
                        case "+":
                            value = a + b;
                            break;
                        case "*": value = a * b; break;
                    }
                    String count = String.valueOf(value);
                    for (int j = 0; j < count.length(); j++) {
                        stack.push(count.charAt(j));
                    }
                } else if (ops.length == 1) {
                    for (int j = 0; j < ops[0].length(); j++) {
                        stack.push(ops[0].charAt(j));
                    }
                }

            } else {
                stack.push(c);
            }
        }

        StringBuilder builder = new StringBuilder();
        while (!stack.empty())
            builder.append(stack.pop());

        try {
            System.out.println(Integer.valueOf(builder.reverse().toString()));
        } catch (Exception e) {
            System.out.println(-1);
        }
    }
}
第三题只过了80%,原因应该是注意的那个部分没有实现。
但是那个样例给的我也确实没有看懂,希望有AC的dalao能给分享一波代码
#华为##笔试题目##秋招#
全部评论
我就AC了一道,第二题中间搞了半天,最后发现是自己***了,估计凉了。
点赞 回复 分享
发布于 2018-08-15 23:20
什么时候投的,我投了一两个星期都没消息
点赞 回复 分享
发布于 2018-08-16 00:14
是远程机试吗大佬
点赞 回复 分享
发布于 2018-08-16 02:37
# -*- coding: utf-8 -*- s = raw_input() ops, nums = [], [] n = len(s) ret = -1 flag = True i = 0 while i < n:     if s[i].isdigit():         j = i         num = 0         while j < n and s[j].isdigit():             num = num * 10 + ord(s[j]) - ord('0')             j += 1         nums.append(num)         i = j - 1     elif s[i] == ')':         if len(ops) == 0:             flag = False             break         op = ops[-1]         ops.pop()         if op == '^' and len(nums) > 0:             ans = nums[-1]             nums.pop()             nums.append(ans + 1)         elif (op == '*' or op == '+') and len(nums) > 1:             a, b = nums[-1], nums[-2]             nums.pop()             nums.pop()             nums.append((a * b) if op == '*' else (a + b))         else:             flag = False             break         if len(ops) == 0 or ops[-1] is not '(':             flag = False             break         ops.pop()         if len(ops) == 0:             ret = nums[-1]         if len(ops) == 0 and i < n - 1 and len(nums) > 0:             nums.pop()     elif s[i] == ' ':         pass     else:         ops.append(s[i])     i += 1 if len(ops) > 0:     flag = False if ret is not -1:     print ret else:     print -1 if flag == False else nums[-1]
点赞 回复 分享
发布于 2018-08-16 09:00
我昨天也笔试了,什么时候出结果呢
点赞 回复 分享
发布于 2018-08-16 09:18
第三题我ac了,待会可以贴个代码上来
点赞 回复 分享
发布于 2018-08-16 12:10
import sys class Soloution: def get_lisp_ast_result(self, eavl_str): if len(eavl_str) < 2 or eavl_str[0] != '(' or eavl_str[-1] != ')': print(-1) return # store infos with a stack stack = list() index = 0 space_count = 0 while index < len(eavl_str): # check if two or more spaces if space_count > 1: print(-1) return if eavl_str[index] == ' ': index += 1 space_count += 1 continue space_count = 0 if eavl_str[index] != ')': stack.append(eavl_str[index]) else: tmp = list() flag = False while len(stack) > 0: val = stack.pop() if val == '(': flag = True break tmp.insert(0, val) if not flag: print(-1) return rs = None # eavl strs if tmp[0] == '+': rs = self.do_add(tmp) elif tmp[0] == '*': rs = self.do_multi(tmp) elif tmp[0] == '^': rs = self.do_iadd(tmp) if rs is None: print(-1) return else: # end with legal ast str if len(stack) == 0: print(rs) return stack.append(str(rs)) index += 1 if len(stack) > 1 or not stack[0].isnumeric(): print(-1) else: print(stack[0]) def do_add(self, strs): if len(strs) != 3 or not strs[1].isnumeric() or not strs[2].isnumeric(): return return int(strs[1]) + int(strs[2]) def do_multi(self, strs): if len(strs) != 3 or not strs[1].isnumeric() or not strs[2].isnumeric(): return return int(strs[1]) * int(strs[2]) def do_iadd(self, strs): if len(strs) != 2 or not strs[1].isnumeric(): return return int(strs[1])+1 if __name__ == '__main__': args = sys.stdin.readline().strip() solution = Soloution() solution.get_lisp_ast_result(args)
点赞 回复 分享
发布于 2018-08-16 13:28

相关推荐

没有offer的小土豆:专业面试一般是分配面试官然后联系你面试 应该是还没给你分配对应面试官
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
评论
点赞
40
分享
牛客网
牛客企业服务