题目描述:比如有N个人,M种关系,有关系的人可以组队,关系具有传递性,如person A和person B有关系,person B和personC有关系,那么personA B C 就有关系,可以组一队。
输入:
第一行:人数N
第二行:关系M
第三行:第一个人和其他人的关系
第三行:第二个人和其他人的关系
依次类推
输出:
可以组的队数
例:
输入:
3
3
1,1,0
1,1,1
0,1,1
输出:
1
package com.Ali;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 阿里笔试:
* 输入:
* 3//人数
* 3//关系
* 1,1,0//表示第一个人和第二个人有关系
* 1,1,1//表示第二个人和第一个和第三个人有关系==>则说明第一个人和第三个人有关系
* 0,0,1
* 输出:
* 2//有关系的人可以组队,则说明可以组两个队输出2
* */
public class Team {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int M = input.nextInt();
List<String> list = new ArrayList<>();
int index = M;
while(index!=-1) {
index--;
list.add(input.nextLine());
}
int [][] arr = ListToArr(N,M,list);
System.out.println(Count(N,M,arr));
}
//处理数组
private static int[][] ListToArr(int N, int M, List<String> list) {
int[][] arr = new int[N][M];
for(int i=1;i<=N;i++) {
for(int j=1;j<=M;j++){
arr[i-1][j-1] = Integer.parseInt(list.get(i).split(",")[j-1]);
}
}
return arr;
}
//计算队伍
private static int Count(int n, int m, int[][] arr) {
int Team = m;
for(int i=0;i<n-1;i++) {
for(int j=i;j<m;j++) {
if(arr[i][j]==1&&i!=j) {
Team--;
}
}
}
return Team;
}
}
解析:这个题的逻辑很简单,大家看代码可以很清楚,唯一的麻烦的地方我认为是对数组的处理,因为输入的不是数字而是字符串
我也是一个阿里的求职的小白学生,大家有问题可以相互交流邮箱:lpf_student@163.com