4.11 网易互娱服务端笔试 AC(3.16/4)
第一题 模拟题
这个题就是个模拟题没啥好说的,但是写模拟容易写复杂了,所以,写模拟前一定要想好怎么写,要不然,浪费大量时间不说,代码根本没法改
/**
* @Author: Shang Huaipeng
*/
import java.util.*;
public class Solution {
public static void main(String[] args) {
String add = new Solution().add("25","15.123");
System.out.println(add);
}
public String add (String num1, String num2) {
// write code here
String[] s1 = num1.split("\\.");
String[] s2 = num2.split("\\.");
StringBuilder xiaoshu = new StringBuilder();
int last=0;
if(s1.length==1&&s2.length==1){
}
else if(s1.length==1){
xiaoshu.append(new StringBuilder(s2[1]).reverse().toString());
}
else if(s2.length==1){
xiaoshu.append(new StringBuilder(s1[1]).reverse().toString());
}
else{
for(int i=Math.max(s1[1].length(),s2[1].length())-1;i>=0;i--){
int a1=(i<s1[1].length())?s1[1].charAt(i)-'0':0;
int a2=(i<s2[1].length())?s2[1].charAt(i)-'0':0;
xiaoshu.append((char)((a1+a2+last)%9+'0'));
last=(a1+a2+last)/9;
}
}
String zheng1 = new StringBuilder(s1[0]).reverse().toString();
String zheng2 = new StringBuilder(s2[0]).reverse().toString();
StringBuilder zheng = new StringBuilder();
for(int i=0;i<Math.max(zheng1.length(),zheng2.length());i++){
int a1=(i<zheng1.length())?zheng1.charAt(i)-'0':0;
int a2=(i<zheng2.length())?zheng2.charAt(i)-'0':0;
zheng.append((char)((a1+a2+last)%9+'0'));
last=(a1+a2+last)/9;
}
if(last!=0){
zheng.append((char)(last+'0'));
}
return zheng.reverse().toString()+(xiaoshu.length()>0?"."+xiaoshu.reverse().toString():"");
}
} 第二题
算是一个简单的排列组合吧,先将两个数组排序
答案初始为1
在遍历W数组,找到每个工人能够做的任务数
如果任务数小于当前工人的编号,那么说明这个人没法工作,答案为0,
任务数大于等于工人的编号,答案就乘上(任务数-工人前面的人数)(排列组合)
/**
* @Author: Shang Huaipeng
* @Date: 2020/4/11 19:01
* @Version 1.0
*/
import java.io.BufferedInputStream;
import java.util.*;
public class Main {
/*
6
1 6 3 4 5 2
2 3 1 4 6 5
10
*/
public static void main(String[] args) {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n = sc.nextInt();
int w[] = new int[n];
int t[] = new int[n];
int m = 0;
for (int i = 0; i < n; i++) {
w[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
t[i] = sc.nextInt();
}
m = sc.nextInt();
Arrays.sort(w);
Arrays.sort(t);
int ans = 0;
int i = 0;
LinkedList<Integer> list = new LinkedList<>();
while (i < n) {
int index = lower(t, 0, n, w[i]+1) - 1;
if (index < i) {
ans = -1;
break;
}
list.add(index + 1);
i++;
}
int tmp = 1;
int jian = 0;
for (Integer integer : list) {
//System.out.println(integer-jian);
tmp = (tmp * (integer - jian)) % m;
jian++;
}
ans = (ans + tmp) % m;
//System.out.println(ans);
if (ans == -1) ans = 0;
System.out.println(ans);
}
static int lower(int nums[], int l, int r, int num) {
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] >= num) r = mid;
else l = mid + 1;
}
return l;
}
} 第四题
dp思想
import java.util.*;
public class Solution {
/*
*
* @param boxes int整型二维数组
* @return int整型
*/
public int maxBoxes (int[][] boxes) {
// write code here
Arrays.sort(boxes,(o1,o2)->{
if(o1[0]!=o2[0])return o1[0]-o2[0];
if(o1[1]!=o2[1])return o1[1]-o2[1];
return o1[2]-o2[2];
});
int dp[]=new int[boxes.length];
Arrays.fill(dp,1);
for(int i=1;i<boxes.length;i++){
int max=0;
for(int j=0;j<i;j++){
if(boxes[i][0]>boxes[j][0]&&boxes[i][1]>boxes[j][1]&&boxes[i][2]>boxes[j][2])max=Math.max(dp[j],max);
}
dp[i]+=max;
}
int ans=0;
for(int i=0;i<boxes.length;i++){
ans=Math.max(ans,dp[i]);
}
return ans;
}
} #网易互娱##笔试题目#
OPPO公司福利 1216人发布