Java程序設計中,經常會用到一些傳統的算法問題,比如田忌和齊威王的賽馬問題。這個問題的背景是,田忌和齊威王各有三匹賽馬,要進行三場比賽,比賽的規則是每場比賽各自出一匹馬進行比拼,贏一場得一分,平局不得分,輸了沒有得分。為了保持懸念,如果某次比賽打平,那么就用盡情況對方的最差馬與自己的最好馬比賽。
// Java代碼 public class Horse { private String name; private int speed; public Horse(String name, int speed) { this.name = name; this.speed = speed; } public int getSpeed() { return speed; } public String toString() { return name; } }
為了讓比賽更有意義,我們可以先將每位馬主手中的馬按照速度進行排序,然后對比賽場數進行貪婪選擇,優先讓自己的最好馬與對方的最差馬比賽,這樣才能在賽場上立于不敗之地。
// Java代碼 public class Racing { public static int match(Horse[] team1, Horse[] team2) { Arrays.sort(team1, Comparator.comparing(Horse::getSpeed).reversed()); Arrays.sort(team2, Comparator.comparing(Horse::getSpeed).reversed()); int score = 0; for (int i = 0, j = 0; i< team1.length && j< team2.length; ) { if (team1[i].getSpeed() >team2[j].getSpeed()) { score++; i++; j++; } else { if (team1[i].getSpeed()< team2[team2.length-1].getSpeed()) { j++; } i++; } } return score; } }
這個田忌和齊威王賽馬問題看似簡單,但其實涉及到了算法設計中的貪婪策略和排序算法等相關問題。完整的Java代碼如上所示,有興趣的同學可以自行實現并嘗試優化。
上一篇python畫藍色的圓
下一篇css中li.on