用友昨日笔试
题目可以看这位牛友发的
https://www.nowcoder.com/discuss/648838695012814848
还没投校招却收到了笔试邀请(倒是之前投过实习
上来就拉了坨大的,题目比较晦涩难懂,不乏歧义句,比如第一题的设定中说
第一行输入一个正整数 n
接下来 n行,当前节点与其他j个节点的上下游关系...
当j=-1时,是终止节点
nm这个j既是数量又是节点id
本来限定java写算法就不快,还浪费了不少时间读题目。。。。
前两题用贪心算法直接就过了,第三题明显跳台阶要用dp做,可惜只a了80%,就不放出来献丑了,为了最后一题没排查,结果最后一题根本没时间写....
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static boolean checkSeq(List<List<Integer>> nodes, int[] check, int index){
List<Integer> node = nodes.get(index);
if(node.get(0)==-1){ //终止节点
return true;
}
check[index] = 1;
for(int i=0;i<node.size();i++){
int newIndex = node.get(i); // 每次取出一个节点递归遍历
if(check[newIndex]==1){
return false;
}
check[newIndex] = 1; //递归前记得记录,返回时记得回溯
if(!checkSeq(nodes, check, newIndex)){
return false;
}
check[newIndex] = 0;
}
check[index] = 0;
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
String line = in.nextLine();
int n = Integer.valueOf(line);
List<List<Integer>> nodes = new ArrayList<>();
for(int i=0;i<n;i++){
List<Integer> node = new ArrayList<>();
line = in.nextLine();
String[] nodelists = line.split(" ");
for(String num: nodelists)
node.add(Integer.valueOf(num));
nodes.add(node);
}
for(int i=0;i<n;i++) {
int[] check = new int[n]; //使用一个数组记录判断是否有环
if(checkSeq(nodes, check, i)){
System.out.print(i);
System.out.print(" ");
}
}
}
}
}
第二题
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static boolean solve(int damage, int limit){
int multi=0;
//从两份开始分(题目已说明)
for(int i=2; i*i<=damage;i++){
int v = damage/i; //底数
int m = damage%i; //余数,如14分成3分份的结果 4+4+4+2
multi = (int)Math.pow(v, i);
if(m!=0){
multi *= m; //余数不为0补上
}
if(multi > limit){
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int limit = in.nextInt();
int damage = in.nextInt();
if(solve(damage, limit)){
System.out.println(true);
}
else{
System.out.println(false);
}
}
}
}
