第一道 税收新政策
感觉这道题的考点就是考审题能力还有Coding技巧了,主要用一个flag标志当前数字处于哪个收入层次。
import java.util.Scanner;
/**
* 网易2020校园招聘模拟笔试
* 国家新税收制度
* 纯属Coding技巧的题目
*/
public class Main {
public static double process(int n) {
int num = n - 5000;
boolean flag = false;
double sum = 0;
if (num > 80000) {
sum += (num - 80000) * 0.45;
flag = true;
}
if (flag == true || num > 55000) {
sum = (flag == true ? (sum + (80000 - 55000) * 0.35) : (sum + (num - 55000) * 0.35));
flag = true;
}
if (flag == true || num > 35000) {
sum = (flag == true ? (sum + (55000 - 35000) * 0.3) : (sum + (num - 35000) * 0.3));
flag = true;
}
if (flag == true || num > 25000) {
sum = (flag == true ? (sum + (35000 - 25000) * 0.25) : (sum + (num - 25000) * 0.25));
flag = true;
}
if (flag == true || num > 12000) {
sum = (flag == true ? (sum + (25000 - 12000) * 0.2) : (sum + (num - 12000) * 0.2));
flag = true;
}
if (flag == true || num > 3000) {
sum = (flag == true ? (sum + (12000 - 3000) * 0.1) : (sum + (num - 3000) * 0.1));
flag = true;
}
if (num > 0) {
sum = (flag == true ? (sum + 3000 * 0.03) : (sum + num * 0.03));
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int n = sc.nextInt();
System.out.printf("%.0f", process(n));
System.out.println();
}
}
}
第二道 将4个及4个以上连续字典序的字母转为"首个字母-结束字母"的形式
package wangyi;
import java.util.Scanner;
/**
* 网易2020校园招聘模拟笔试
* 将4个及4个以上连续字典序的字母转为"首个字母-结束字母"的形式
* 思路:从第一个字母开始遍历到倒数第2个字母,判断str.charAt(i + 1) - str.charAt(i)是否等于1,若是则记录连续数量以及暂存字母序列到temp中
* 当时str.charAt(i + 1) - str.charAt(i) != 1时, 若count >= 3,则可以拼接出"首个字母-结束字母"的形式,若count < 3,则还是以原来的序列添加到结果集合中
*/
public class Main {
public static String process(String str) {
int count = 0; // 计算有几个连续的字母
StringBuilder sb = new StringBuilder(); // 最终结果
StringBuilder temp = new StringBuilder(); // 用于暂存临时的字母序列
int i = 0;
for (; i < str.length() - 1; i++) {
if (str.charAt(i + 1) - str.charAt(i) == 1) {
temp.append(str.charAt(i));
count++;
} else {
if (count >= 3) {
sb.append(temp.charAt(0) + "-" + str.charAt(i));
} else {
sb.append(temp);
sb.append(str.charAt(i));
}
count = 0;
temp = new StringBuilder();
}
}
// 最后需要作判断
if (count >= 3 && str.charAt(i) - str.charAt(i - 1) == 1) {
sb.append(temp.charAt(0) + "-" + str.charAt(i));
} else {
sb.append(temp).append(str.charAt(i));
}
return sb.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-- > 0) {
String str = sc.next();
System.out.println(process(str));
}
}
}
第三道 恢复X进制和Y进制的数字
主要思路就是用二分法寻找分割字符串的中点,然后看左右两个字符串恢复成10进制数字是否相等。
package wangyi;
import java.util.Scanner;
/**
* 网易2020校园招聘模拟笔试
* 恢复X进制和Y进制的数字
* 思路:用二分法,将字符串进行分割,分别计算左边和右边的字符串对应各自进制的数字是多少
* 若左边 > 右边,则right = mid,寻找中点进行分割
* 若左边 < 右边,则left = mid,寻找中点进行分割
* 若左边 == 右边,说明寻找到了答案
*/
public class Main {
// 用二分法寻找中点,再分别计算中点左右各自进制对应的数字
public static int process(String str, int x, int y) {
int length = str.length();
int left = 0;
int right = length - 1;
while (left < right) {
int mid = left + ((right - left) >> 1);
// 左边字符串
String str1 = str.substring(0, mid + 1);
// 右边字符串
String str2 = str.substring(mid + 1);
int[] resArr = calculate(str1, str2, x, y);
if (resArr[0] == resArr[1]) {
return resArr[0];
} else if (resArr[0] > resArr[1]) {
right = mid;
} else {
left = mid + 1;
}
}
return -1;
}
// 计算字符串左边和字符串右边各自进制对应的数字
public static int[] calculate(String str1, String str2, int x, int y) {
int num1 = 0;
int num2 = 0;
int length = str1.length() - 1;
for (int i = 0; i < str1.length(); i++) {
if (str1.charAt(i) >= 'A' && str1.charAt(i) <= 'Z') {
num1 += Integer.valueOf(str1.charAt(i) - 55) * Math.pow(x, length--);
} else {
num1 += Integer.valueOf(str1.charAt(i) - 48) * Math.pow(x, length--);
}
}
length = str2.length() - 1;
for (int i = 0; i < str2.length(); i++) {
if (str2.charAt(i) >= 'A' && str2.charAt(i) <= 'Z') {
num2 += Integer.valueOf(str2.charAt(i) - 55) * Math.pow(y, length--);
} else {
num2 += Integer.valueOf(str2.charAt(i) - 48) * Math.pow(y, length--);
}
}
return new int[]{num1, num2};
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-- > 0) {
int x = sc.nextInt();
int y = sc.nextInt();
String str = sc.next();
System.out.println(process(str, x, y));
}
}
}
#网易##笔试题目#