华为机试–最后一题
UNO卡牌,最优的解使得出牌次数最多
1 4 3 4 5
r y b b r
3
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main2 {
class Poker {
String digital;
String color;
boolean has;
public String getDigital() {
return digital;
}
public void setDigital(String digital) {
this.digital = digital;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isHas() {
return has;
}
public void setHas(boolean has) {
this.has = has;
}
@Override
public String toString() {
return "Poker{" +
"digital='" + digital + '\'' +
", color='" + color + '\'' +
", has=" + has +
'}';
}
}
// 1 4 3 4 5 r y b b r
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String line1 = in.nextLine();
String line2 = in.nextLine();
String[] digitalList = line1.split(" ");
String[] colorList = line2.split(" ");
List<Poker> pokers = new ArrayList<>();
for (int i = 0; i < digitalList.length; i++) {
Poker poker = new Main2().new Poker();
poker.setDigital(digitalList[i]);
poker.setColor(colorList[i]);
poker.setHas(true);
pokers.add(poker);
}
if (pokers.size() <= 2){
System.out.println(pokers.size());
}
int max = 1;
for (int i = 0; i < pokers.size(); i++) {
int temp = hasNext(pokers, pokers.get(i), 1);
if (temp > max){
max = temp;
}
}
System.out.println(max);
}
public static int hasNext(List<Poker> pokers, Poker targetPoker, int max) {
targetPoker.setHas(false);
Poker poker1 = exitDigital(pokers, targetPoker);
if (poker1 == null) {
Poker poker2 = exitColor(pokers, targetPoker);
if (poker2 == null) {
targetPoker.setHas(true);
return max;
} else {
max = hasNext(pokers, poker2, ++max);
}
} else {
max = hasNext(pokers, poker1, ++max);
}
targetPoker.setHas(true);
return max;
}
public static Poker exitDigital(List<Poker> pokers, Poker targetPoker) {
for (Poker p :
pokers) {
if (p.isHas() && p.getDigital().equals(targetPoker.getDigital()) && !p.getColor().equals(targetPoker.getColor())) {
p.setHas(false);
return p;
}
}
return null;
}
public static Poker exitColor(List<Poker> pokers, Poker poker) {
for (Poker p :
pokers) {
if (p.isHas() && p.getColor().equals(poker.getColor()) && !p.getDigital().equals(poker.getDigital())) {
p.setHas(false);
return p;
}
}
return null;
}
}