百度笔试你们A了几道题
百度凉凉,做的自闭了

第一题a了10%,有大佬帮忙看一下吗,我的思路是如果n是素数,就返回n*(n-1)-1,如果n不是素数,就找到一大的素数,返回n*m-1
public static boolean isS(int n){
for(int i = 2;i < Math.sqrt(n);i++){
if(n % i==0)
return false;
}
return true;
}
public static void main(String[] args) {
Scanner ac = new Scanner(System.in);
int n = ac.nextInt();
int num = 2;
if(isS(n)){
num = n-1;
}else {
for(int i = n;i>2;i--){
if(isS(i)){
num = i;
break;
}
}
}
System.out.println(num+" "+n);
if(n == 2)
System.out.println(1);
else {
long sum = (long)n*num-1;
System.out.println(sum);
}
} 第二题一直报错,思路是找到每次排序记录cnt ,cnt = (num[n-1]-num[n-2])/(n+1);
一点也没过。。。。,有大佬指出一下错误在哪,谢谢
public static void main(String[] args) {
Scanner ac = new Scanner(System.in);
int n = ac.nextInt();
long[] num = new long[n];
for(int i = 0;i < n;i++)
num[i] = (long)ac.nextInt();
Arrays.sort(num);
long ans = 0;
while(num[n-1] >= n){
long b = num[n-1]-num[n-2];
long cnt = b/(n+1);
if(cnt == 0)
cnt = 1;
// System.out.println(cnt);
num[n-1] -= n*cnt;
for(int i = 0;i < n-1;i++)
num[i] += cnt;
ans += cnt;
Arrays.sort(num);
}
System.out.println(ans);
} 第三题的话过了60%,用的深搜,后来超时了,也没时间改了 public static int ans = 0;
static class Node{
public int val;
public int index;
public ArrayList<Node> next = null;
Node(int val,int index){
this.val = val;
this.index = index;
}
public int getVal(){
return val;
}
public ArrayList<Node> getNext(){
return next;
}
public void setNext(ArrayList<Node> t){
this.next = t;
}
public int getIndex(){
return index;
}
}
public static void main(String[] args) {
Scanner ac = new Scanner(System.in);
int n = ac.nextInt();
Node[] nodes = new Node[n];
for(int i = 0;i < n;i++){
int tmp = ac.nextInt();
nodes[i] = new Node(tmp,i);
}
for(int i = 0;i < n-1;i++){
int a = ac.nextInt()-1;
int b = ac.nextInt()-1;
Node root = nodes[a];
if(root.getNext() == null){
ArrayList<Node> t = new ArrayList<>();
t.add(nodes[b]);
root.setNext(t);
}else{
root.getNext().add(nodes[b]);
}
Node root1 = nodes[b];
if(root1.getNext() == null){
ArrayList<Node> t = new ArrayList<>();
t.add(nodes[a]);
root1.setNext(t);
}else{
root1.getNext().add(nodes[a]);
}
}
System.out.println(help(nodes));
// for (int i = 0;i < n;i++){
// System.out.print(nodes[i].getVal()+" ");
// if(nodes[i].getNext() == null){
// System.out.println();
// continue;
// }
//
// int cnt = nodes[i].getNext().size();
// for(int j = 0;j < cnt;j++)
// System.out.print(nodes[i].getNext().get(j).getVal() +" ");
// System.out.println();
// }
}
public static int help(Node[] nodes){
boolean[] isR = new boolean[nodes.length];
for(int i = 0;i < nodes.length;i++){
isR[i] = true;
dfs(isR,nodes,1,i);
isR[i] = false;
}
return ans;
}
public static void dfs(boolean[] isR,Node[] nodes,int cnt,int beg){
ArrayList<Node> tmp = nodes[beg].getNext();
if(tmp == null){
ans = Math.max(ans,cnt);
return;
}
for(int i = 0;i < tmp.size();i++){
Node node = tmp.get(i);
int index = node.getIndex();
if(!isR[index] && node.getVal() > nodes[beg].getVal()){//如果是递增的序列,dfs
isR[index] = true;
dfs(isR,nodes,cnt+1,index);
isR[index] = false;
}else if(!isR[index] && node.getVal() <= nodes[beg].getVal()){
ans = Math.max(ans,cnt);//不满足条件,继续寻找
isR[index] = true;
dfs(isR,nodes,1,index);
isR[index] = false;
}
}
ans = Math.max(cnt,ans);
}