【发布时间】:2017-12-15 18:57:32
【问题描述】:
一群孩子想玩一个游戏,叫做 UnMonopoly ,其中每回合钱最多的玩家必须把他/她的一半钱给钱最少的玩家。回合结束后,宣布奖金最高的人为获胜者。通过计算回合数和玩家数来实现这个游戏。 (提示:使用优先队列)
示例输入:
玩家人数:n
圈数:m
输入每个玩家的详细信息和金钱
输出:
获胜者是:玩家姓名
这是我的问题,我已经写了一个代码。这是一种正确的实施方式还是有任何缺陷。有没有时间复杂度更小的更好的实现方式?
这是我的代码,
import java.util.*;
class Player implements Comparator<Player> {
String name;
int money;
Player(String name, int m) {
this.name = name;
money = m;
}
public Player() {
this.money = 0;
this.name = null;
}
public String toString() {
return "NAME: "+name+"\nMONEY: "+money;
}
public int compare(Player p1, Player p2) {
return p2.money - p1.money;
}
}
public class Unmonopoly {
public static void main(String[] args) {
Player pl = new Player();
Stack<Player> pla = new Stack<Player>();
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of players: ");
int n = sc.nextInt();
PriorityQueue<Player> play = new PriorityQueue<Player>(n,pl);
System.out.println("Enter player details: ");
for(int i = 0; i < n; i++) {
Player p = new Player(sc.next(),sc.nextInt());
play.add(p);
}
for(Player p: play) {
System.out.println("Name: "+p.name+"\nMoney: "+p.money);
}
System.out.println("\nEnter the number of turns: ");
int turns = sc.nextInt();
for(int i = 0; i < turns; i++) {
Player max = play.peek();
max.money = max.money / 2;
while(!play.isEmpty()) {
pla.push(play.peek());
play.remove();
}
Player min = pla.pop();
pla.push(min);
System.out.println("Player with min money is: \n"+min);
min.money = min.money + max.money;
while(!pla.isEmpty()) {
play.add(pla.peek());
pla.pop();
}
}
sc.close();
System.out.println("**************WINNER************** \n\n\tNAME: "+play.peek().name+"\n\tMONEY: "+play.peek().money);
}
}
【问题讨论】: