题目可以看这位牛友发的
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); } } } }