招银笔试编程--成就完成

前段时间做了一下招银的在线笔试,里面有道成就完成的编程题,当时没有完全做对,有部分测试没通过,事后完善了一下。

题目: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)+" ");
		}
		
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值