华为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

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
点赞 40 评论
分享
牛客网
牛客企业服务