查看所有50道基础算法题请看:
Java的50道基础算法题
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
package Demo18Compete_Roll;
import java.util.ArrayList;
public class Compete_Roll {
/**
* 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。
* 有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
*/
/*
分析:有两支队伍,每个队伍有三个队员,a不和x比,c不和x,z比,那c只能和y比
那么,a只能和z比,b和x比,用程序来实现,把两支队伍装到数组中,然后嵌套遍历,排除不能匹配的,就得到了结果。
*/
public static void main(String[] args) {
System.out.println("比赛的对抗名单安排如下:");
System.out.println("=======================");
// 将两个队伍分别装到两个ArrayList集合中,因为在后面安排的时候要删除已经有对手的
ArrayList<Character> listI = new ArrayList<>();
listI.add('a');
listI.add('b');
listI.add('c');
ArrayList<Character> listII = new ArrayList<>();
listII.add('x');
listII.add('y');
listII.add('z');
// 遍历两个集合,排除对应的组合,打印结果,并删除已经匹配到对手的队员
for (int i = listI.size()-1; i >=0; i--) {
for (int j = 0;j<listII.size(); j++) {
if(!(listI.get(i)=='c' && (listII.get(j)=='x' || listII.get(j)=='z'))){
if(!(listI.get(i)=='a' && listII.get(j) =='x')){
System.out.println(listI.get(i)+"-->"+listII.get(j));
listII.remove(j);
}
}
}
}
// 这个解不是很好,因为循环我不得不写两个,一个正着,一个反着,不然的话,会出现有些队员匹配到了两个对手,有的则
// 没有匹配到,希望以后能找到更好的方法,有更优解的小伙伴也欢迎把你的解写到评论区,大家一起讨论哦。
}
}