首页 > 360Java笔试8月24日下午场
头像
溜溜湫_
编辑于 2020-08-24 15:17
+ 关注

360Java笔试8月24日下午场

第一题:判断输入的字符串是不是对称的    ac
思路:把26个字母中对称的字母放在list或者set中,然后判断字符串首尾字符是否相等,并且字符是否为对称的字母
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<Character> list = new ArrayList<>();
        list.add('A');
        list.add('H');
        list.add('I');
        list.add('M');
        list.add('O');
        list.add('T');
        list.add('U');
        list.add('V');
        list.add('W');
        list.add('X');
        list.add('Y');
        for (int i = 0; i < 20; i++) {
            String string = in.nextLine();
            int left = 0;
            int right = string.length() - 1;
            boolean flag = true;
            while (left <= right) {
                if (!list.contains(string.charAt(left)) || !list.contains(string.charAt(right))) {
                    System.out.println("NO");
                    flag = false;
                    break;
                }
                if (string.charAt(left) != string.charAt(right)) {
                    System.out.println("N");
                    flag = false;
                    break;
                }
                left++;
                right--;
            }
            if (flag) {
                System.out.println("YES");
            }

        }
    }
}
第二题:  ac
/**
 * 魔塔闯关  
 * 魔塔是一款时尚经典小游戏,我们将魔塔简化后的规则描述如下:
 * 魔塔有n关,而你可以自由选择前往攻略哪一关,每一关只能获得一次分数。
 * 第i关攻略完成后,你将会获得ai的分数。
 * 某些关有一个特殊的宝物,你只能在攻略完这一关的时候使用这个宝物(
 * 也可以不使用,额外的宝物并不能留到其他关卡使用),
 * 这个宝物将使得这一关不得分,但是将你现有的总得分乘以2作为新的得分。
 * 你现在知道了所有关卡的通关方法,也知道了每一关的得分和是否有宝物,你现在想知道,怎么选择攻略的顺序和使用宝物的方法才能让自己的得分最大化?
 * 输入描述
 * 输入第一行包含一个整数n
 *
 * 接下来n行,每行两个整数ai,bi。ai表示第i关的分数,若bi为1,则第i关有宝物。
 *
 * 输出描述
 * 输出包含一个数,即能获得的最大分数
 */
思路:先把没有宝物的分数加在结果中,把有宝物的关卡按照分数排序,从大到小遍历,如果大于当前分数,就直接加上关卡分数;否则直接乘以2;
贪心问题
代码:
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] nums = new int[n][2];
        int count = 0;
        long res = 0;
        for (int i = 0; i < n; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            if (b == 0) {
                res += a;
            } else {
                count++;
            }
            nums[i][0] = a;
            nums[i][1] = b;
        }
        int[] temp = new int[count];
        int index = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i][1] == 1) {
                temp[index++] = nums[i][0];
            }
        }
        Arrays.sort(temp);
        for (int i = temp.length - 1; i >= 0; i--) {
            if (res < temp[i]) {
                res += temp[i];
            } else {
                res *= 2;
            }
        }
        System.out.println(res);
    }
}




全部评论

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

推荐话题

相关热帖

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

近期精华帖

热门推荐