首页 > 大疆0810笔试
头像
Stephen_C
编辑于 2020-08-11 10:17
+ 关注

大疆0810笔试

Java做的,代码结构没有丝毫优化,交流一下思路好了。。
1.喝咖啡调试bug。 就把所有bug加起来求的。。没感觉有啥难以调试的点
import java.util.Scanner;

public class dajiang1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int A = in.nextInt();
        int X = in.nextInt();
        int total = 0;
        int resultTime = 0;
        for (int i = 0; i < N; i++) {
            total += in.nextInt();
        }
        int temp = X;
        for (int i = 0; i < X; i++) {
            if(total - A*60 > 0){
                total -= A*60;
                resultTime += 60;
                temp--;
            }
        }
        if(temp > 0){
            resultTime += Math.ceil((double)total/A);
            System.out.println(resultTime);
        }else{
            if(total > 480 - X*60){
                System.out.println(0);
                return;
            }else{
                System.out.println(resultTime + total);
            }
        }
    }
}
2。吃零食,动态规划,更新时判断零食还够不够
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

class food{
    int price;
    int satisfy;
    int num;

    public food(int price, int satisfy, int num) {
        this.price = price;
        this.satisfy = satisfy;
        this.num = num;
    }
}
class account {
    int totalStatisfy;
    int[] numbers;

    public account(int totalStatisfy) {
        this.totalStatisfy = totalStatisfy;
    }

}
public class dajiang2 {
    public static int N;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        N = in.nextInt();
        int T = in.nextInt();
        account[] moneyMax = new account[T+1];
        food[] foods = new food[N];
        int result = 0;
        for (int i = 0; i < N; i++) {
            foods[i] = new food(in.nextInt(), in.nextInt(), in.nextInt());
        }
        moneyMax[0] = new account(0);
        moneyMax[0].numbers = new int[N];
        for (int i = 0; i < N; i++) {
            moneyMax[0].numbers[i] = foods[i].num;
        }
        for (int i = 1; i <= T; i++) {
            findMax(moneyMax, i, foods);
            if(moneyMax[i].totalStatisfy > result) result = moneyMax[i].totalStatisfy;
        }
        System.out.println(result);
    }

    public static void findMax(account[] moneyMax, int point, food[] foods){
        int max = 0;
        moneyMax[point] = new account(0);
        moneyMax[point].numbers = new int[N];
        for (int i = 0; i < N; i++) {
            moneyMax[point].numbers[i] = foods[i].num;
        }
        for (int i = 0; i < foods.length; i++) {
            boolean whetherBuy = false;
            if(point - foods[i].price >= 0 && moneyMax[point - foods[i].price].numbers[i] > 0){
                if(moneyMax[point - foods[i].price].totalStatisfy + foods[i].satisfy > max){
                    max = moneyMax[point - foods[i].price].totalStatisfy + foods[i].satisfy;
                    moneyMax[point].totalStatisfy = max;
                    for (int j = 0; j < N; j++) {
                        moneyMax[point].numbers[j] = moneyMax[point - foods[i].price].numbers[j];
                    }
                    moneyMax[point].numbers[i]--;
                }

            }
        }
    }
}

3.字母表,递归。之前是64%。因为递归的时候漏了二维数组一些边界条件的判断,修改完不知道能有多少
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class dajiang3 {
    public static boolean flag = false;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        in.nextLine();
        char[][] charArray = new char[N][];
        for (int i = 0; i < N; i++) {
            String temp = in.nextLine();
            charArray[i] = temp.toCharArray();
        }
        int M = in.nextInt();
        in.nextLine();
        String[] stringArray = new String[M];
        ArrayList<String> resultArray = new ArrayList<>();
        for (int i = 0; i < M; i++) {
            stringArray[i] = in.nextLine();
            flag = false;
            for (int j = 0; j < charArray.length; j++) {
                for (int k = 0; k < charArray[j].length; k++) {
                    if(charArray[j][k] == stringArray[i].charAt(0)){
                        ifOk(stringArray[i], 1, charArray, j, k);
                    }
                }
            }
            if(flag) resultArray.add(stringArray[i]);
        }
                //之前用牛客考试的时候,有一次自定义ArrayList比较器,使用Colletions为ArrayList排序,自己IDE没问题,牛客显示数组越界,不知道为啥,有没有大佬告诉一下原因。。。
                //所以现在考试排序都是复制到数组里用Arrays排序。
        String[] result = new String[resultArray.size()];
        for (int i = 0; i < resultArray.size(); i++) {
            result[i] = resultArray.get(i);
        }
        Arrays.sort(result);
        for (int i = 0; i < result.length; i++) {
            System.out.println(result[i]);
        }
    }
    public static void ifOk(String string, int place, char[][] charArray, int i, int j){
        if(place == string.length()){
            flag = true;
            return;
        }else{
            if(i - 1 > 0 && j < charArray[i-1].length && charArray[i-1][j] == string.charAt(place)){
                ifOk(string, place+1, charArray, i-1, j);
            }
            if(i + 1 < charArray.length && j < charArray[i+1].length && charArray[i+1][j] == string.charAt(place)){
                ifOk(string, place+1, charArray, i+1, j);
            }
            if(j - 1 > 0 && i < charArray.length && charArray[i][j-1] == string.charAt(place)){
                ifOk(string, place+1, charArray, i, j - 1);
            }
            if(j + 1 <charArray[i].length  && i < charArray.length && charArray[i][j+1] == string.charAt(place)){
                ifOk(string, place+1, charArray, i, j + 1);
            }
        }
    }
}
        





全部评论

(7) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐