在牛客网编程题容易踩的坑(附例题)

1 篇文章 0 订阅
1 篇文章 0 订阅

闲来无事,发现了牛客网这个好东西。正好最近要参加华为的机试,就找了点题做。

例题是华为机试通过率最低的24点计算问题,点这个就可以去看

https://www.nowcoder.com/ta/huawei

 

这道题我写了将近一个小时才写完,一直觉得输出没问题,最后为了满足输出,调整花了老久...
 

总结一下在牛客网编程题容易踩的坑:

1:没用while循环处理

2:用了while循环处理,但是静态变量没有每次循环的时候初始化

3:遇到特殊情况的时候,可能循环就中断了,比如这题,我一开始输出Error之后程序就退出了,但是按题意,循环应该继续

4:一些非法访问之类的问题,在最外层加个trycatch其实就可以解决

5:注意输出的大小写,比如这题我一开始是非法输入我就输出“Error”,但是题目要求是“ERROR”,这个错找了我将近一个小时...

 

最后附上个人答案:


/*
 * Created by Erwei on 2020/7/9
 * At time 8:30
 */

import java.util.Scanner;

public class Main {
    static float[] num = new float[5];
    static String[] strings;

    static int fir;
    static int sec;
    static int thd;

    public void input() {

        String[] poker = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        Scanner wei = new Scanner(System.in);
        boolean pass;
        while (wei.hasNext()){
            String er = wei.nextLine();
            strings = er.split(" ");
            fir = -1;
            sec = -1;
            thd = -1;
            pass = true;

            for (int i = 1; i < 5; i++) {
                for (int j = 0; j < 13; j++) {
                    if (poker[j].equals(strings[i-1]) || strings[i-1].equals("1")){
                        num[i] = j + 1;
                        break;
                    }
                    else if(j==12){
                        System.out.println("ERROR");
                        pass = false;
                        break;
                    }

                }

            }

            if (pass && !every())
                System.out.println("NONE");
        }
    }

    public boolean every() {

        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                for (int k = 1; k < 5; k++) {
                    for (int l = 1; l < 5; l++) {
                        if (i+j+k+l == 10 && i*j*k*l==24)
                            if(cal(num[i],num[j],num[k],num[l])) {
                                System.out.println(strings[i-1]+symbol(fir)+strings[j-1]+symbol(sec)+strings[k-1]+symbol(thd)+strings[l-1]);
                                return true;
                            }
                    }
                }
            }
        }
        return false;
    }

    public boolean cal(float a,float b,float c,float d) {
        float[][] result = sim2(sim1(a,b),c);

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (result[i][j] + d == 24){
                    fir = i;
                    sec = j;
                    thd = 0;

                    return true;
                }

                if (result[i][j] - d== 24){
                    fir = i;
                    sec = j;
                    thd = 1;
                    return true;
                }
                if (result[i][j] * d == 24){
                    fir = i;
                    sec = j;
                    thd = 2;
                    return true;

                }
                if (result[i][j] != 0) {
                    if (result[i][j] / d == 24) {
                        fir = i;
                        sec = j;
                        thd = 3;
                        return true;
                    }
                }
            }
        }
        return false;
    }

    public float[] sim1(float a, float b){
        float[] result = new float[4];

        result[0] = a + b;
        result[1] = a - b;
        result[2] = a * b;
        if (b == 0)
            result[3] = 1000;
        else
            result[3] = a / b;

        return result;
    }

    public float[][] sim2(float[] a, float b){
        float[][] result2 = new float[4][4];

        for (int i = 0; i < 4; i++) {
            result2[i] = sim1(a[i], b);
        }

        return result2;
    }

    public String symbol(int sym){
        switch (sym){
            case 0:
                return "+";
            case 1:
                return "-";
            case 2:
                return "*";
            case 3:
                return "/";
            default:
                return "#";
        }
    }

    public static void main(String[] args) {
        Main Luo = new Main();
        Luo.input();
    }

}

希望华为机试能过呀~

加油加油

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值