前段时间做了一下招银的在线笔试,里面有道成就完成的编程题,当时没有完全做对,有部分测试没通过,事后完善了一下。
题目:n个成就,第i天完成第i个成就,但是当次成就可能需要完成前置成就,如果之前完成了所有成就,之后当天可以休息。
例子:
输入:
5
2 3 5
1 4
2 2 5
0
1 4
输出:
4 1 0 1 0
例子说明:第一行是数表明有5个成就,第二行应该是第一天完成第一个成就,但是需要完成前置成就2、3、 5成就,所以第一天需要完成4个成就,第三行需要完成成就2,但是有前置成就1、4,由于第一天完成了1,2成就,所以第二天完成4就可以了,以此类推
代码如下:
/*
* 招银笔试
* 成就完成
* n个成就,第i天完成第i个成就,但是当次成就可能需要前置成就,如果之前完成之后当天可以休息
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
String[] str=new String[n];
int[][] ai=new int[n][n];
boolean flag=true;
Set<Integer> set=new HashSet<Integer>();
List<Integer> list=new ArrayList<Integer>();
int num;
for(int i=0;i<n;i++){
num=0;
str=sc.nextLine().split(" ");
for(int j=0;j<str.length;j++){
if(str[j]!=null){
ai[i][j]=Integer.parseInt(str[j]);
if(!set.contains(ai[i][j])){
num++;
set.add(ai[i][j]);
}
}
}
if(set.contains(i+1)){
list.add(num);
}else{
set.add(i+1);
list.add(num+1);
}
}
for(int i=0;i<n;i++){
System.out.print(list.get(i)+" ");
}
}
}
2988

被折叠的 条评论
为什么被折叠?



