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);
}
} 

查看8道真题和解析