兩個乒乓球隊進行比賽名單編程題.
/** * 兩個乒乓球隊進行比賽,各出三人。 * 甲隊為a,b,c三人,乙隊為x,y,z三人。 * 已抽簽決定比賽名單。有人向隊員打聽比賽的名單。 * a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。 */ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; /** * The Class Race. * @author 灬猜想灬 * @since 2012-10-13 */ public class Race { /** The team A. A隊成員列表. */ private final List<String> teamA = new ArrayList<String>(); /** The team B. B隊成員列表. */ private final List<String> teamB = new ArrayList<String>(); /** The race map. 初始比賽選手對照表. */ private final Map<String, List<String>> raceMap = new TreeMap<String, List<String>>(); /** The result map. 最終比賽選手對照表. */ private final Map<String, String> resultMap = new TreeMap<String, String>(); /** The prefered rule. 預定的比賽規則. */ private final List<String> preRule = new ArrayList<String>(); /** * The main method. * * @param args the arguments */ public static void main(final String[] args) { final Race t = new Race(); t.calcRaceRule(); t.adjustRaceMap(); System.out.println(t.resultMap); } /** * Instantiates a new Race. * * @since 2012-10-13 * @author 灬猜想灬 */ public Race() { initTeam(teamA, "a", "b", "c"); initTeam(teamB, "x", "y", "z"); initRaceMap(); preRule.add("a!=x"); preRule.add("c!=x"); preRule.add("c!=z"); } /** * Initial the team.<br> * 初始化隊成員列表. * * @param racers the teamers */ public void initTeam(final List<String> team, final String... racers) { for (final String racer : racers) { team.add(racer); } } /** * Initial the race map.<br> * 初始化初始比賽選手對照表.<br> * 默認A隊的選手可能會對上B隊的每一個人. */ public void initRaceMap() { for (final String racer : teamA) { raceMap.put(racer, new ArrayList<String>(teamB)); } } /** * Calc race rule.<br> * 根據預定規則計算選手對照表. */ private void calcRaceRule() { for (final String rule : preRule) { final String a = String.valueOf(rule.charAt(0)); final String b = String.valueOf(rule.charAt(rule.length() - 1)); final List<String> rivals = raceMap.get(a); if (null != rivals && rivals.contains(b)) { rivals.remove(b); } } } /** * Adjust race map.<br> * 調整最終的比賽對照表. */ public void adjustRaceMap() { // 當結果選手對照表的人數和參賽隊伍中的人數相等時才結束調整. while (resultMap.size() != teamA.size()) { for (final Entry<String, List<String>> entry : raceMap.entrySet()) { final String racerA = entry.getKey(); final List<String> racerBs = entry.getValue(); // 結果對照表中已包含選手A時跳過. if (resultMap.containsKey(racerA)) { continue; } // 從選手A的所有對手中移除所有已經在結果對照表中的選手. racerBs.removeAll(resultMap.values()); // 如果選手A的對手列表中只剩下一個選手B,則將這個組合加入結果對照表中. if (1 == racerBs.size()) { resultMap.put(racerA, racerBs.get(0)); } } } } }
本文由用戶 灬猜想灬 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!