闲来无事,发现了牛客网这个好东西。正好最近要参加华为的机试,就找了点题做。
例题是华为机试通过率最低的24点计算问题,点这个就可以去看
https://www.nowcoder.com/ta/huawei
这道题我写了将近一个小时才写完,一直觉得输出没问题,最后为了满足输出,调整花了老久...
总结一下在牛客网编程题容易踩的坑:
1
:没用
while
循环处理
2
:用了
while
循环处理,但是静态变量没有每次循环的时候初始化
3
:遇到特殊情况的时候,可能循环就中断了,比如这题,我一开始输出Error之后程序就退出了,但是按题意,循环应该继续
4
:一些非法访问之类的问题,在最外层加个
try
,
catch
其实就可以解决
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();
}
}
希望华为机试能过呀~
加油加油