- import java.util.*;
- class RaceCard
- {
- public static void main(String[] args)
- {
- StringBuilder sb1=new StringBuilder("abc");
- StringBuilder sb2=new StringBuilder("xyz");
-
- method(sb1,sb2);
-
-
- }
- public static void method(StringBuilder sb1,StringBuilder sb2)
- {
- ArrayList al=new ArrayList();
- //a1用于存储题干中已知的错误组合。
- ArrayList a2=new ArrayList();
- //a2用于存储经while循环判断之后得到的赛程表。
- al.add("ax");
- al.add("cx");
- al.add("cz");
-
- while (sb1.length()!=0)
- //反复遍历sb1,sb2每有一种组合符合要求,就在sb1,sb2中删掉相应的元素,
- //直到找到所有符合题意的组合,即sb1,sb2都为空。
-
- {
- for (int i=0;i<sb1.length() ;i++ )
- {
- String temp=null;
- int count =0,index=0;
-
- for (int j=0; j<sb2.length();j++ )
-
- {
- if(!al.contains(sb1.charAt(i)+""+sb2.charAt(j)))
-
- {
- temp=sb1.charAt(i)+"-"+sb2.charAt(j);
- count++;
- index=j;
- }
-
- }//在满足已知条件下,判断sb1中一个元素与sb2中某一元素组合的可能,用count记录可能组合数
- //就像ay,az都不在集合a1中,此时count==2。当循环到c时,只有cy符合要求了,此时count==1.
- //也就是说,当且仅当count==1的时候,该组合才是所求一种组合。
- if(count==1)
- {
- a2.add(temp);
- sb1.deleteCharAt(i);
- sb2.deleteCharAt(index);
- }
-
- }
- }
- String[] str=(String[])a2.toArray(new String[a2.size()]);
- //将获取到的组合都存入a2中,并将a2转换为一个String数组。
- Arrays.sort(str);
- //将该数组按自然顺序排序。
- System.out.println("甲乙两队的赛程表为:");
- for(int i=0;i<str.length;i++)
- System.out.println(str[i]);
-
-
- }
- }
复制代码 |