ACM水题-乒乓球 求解答
java: 乒乓球比赛练习题 读一个txt文件 文件内容:WWWWWLLWWWLLWWWLWLWWWWLLLWWWLLLWWWWLLLEw:player1胜 L:player2 胜 E:表示结束比赛
以11分制判断:谁先的11分谁胜 10分为赛点 10分之后谁先得连续2分谁胜
以21分制判断:谁先的21分谁胜 20分为赛点 10分之后谁先得连续2分谁胜
以WWWWWLLWWWLLWWWLWLWWWWLLLWWWLLLWWWWLLLE 为列:
11分制输出结果显示为 (11:4),(11:8) 比赛结果为2:0
21分制输出结果显示为(21,12),(2,3) 比赛结果为1:0
ACM Java --------------------编程问答-------------------- 模拟它的操作就可以了~~ --------------------编程问答-------------------- 把那串分割成数组
String[] str;
声明两个对象
Class A{
int win;
int score;
}
A a;//对象里面包含胜局次数和当前局得分。
B b;
遍历这个数组,
for(int i=0;i<str.length;i++){
if(str[i].equals("W")){
a.score++;
over(a,b);
}else if(str[i].equals("W")){
b.score++;
over(a,b);
}else{
//结束,输出a,b对象结果。
}
over(a,b);方法就是输入两个对象,判断是否达到了一局结束的条件。达到清0并且局数+1,没达到跳过继续。 --------------------编程问答-------------------- 把字符串按字符流读入,依次处理;
设计Player类,定义player1及player2
每消耗一个字符,相应处理player1或者player2的计数器。
再设计一个裁判类,Player类的每次计数器变化时会额外调用裁判类,对player1和player2进行仲裁。 --------------------编程问答--------------------
package com.zjut.json.pingpang.service.impl;--------------------编程问答-------------------- ,这是测试结果,大家还有什么好的算法实现吗,我只是模拟了一下那个逻辑。。。
import com.zjut.json.pingpang.entity.vo.Player;
import com.zjut.json.pingpang.service.ReadFileService;
import com.zjut.json.pingpang.service.RefereeService;
/**
* @author json
*
* @date 2013-5-3
*/
public class RefereeServiceImpl implements RefereeService {
private ReadFileService readFileService;
@Override
public void referee(int limit) {
final String filePath = "/pp.txt";
String[] scoresCount = getReadFileService().read2CharArray(filePath);
Player player_1 = new Player();
Player player_2 = new Player();
for(int i = 0; i < scoresCount.length; i ++){
if("W".equals(scoresCount[i].toUpperCase())){
player_1.setScores(player_1.getScores() + 1);
}
if("L".equals(scoresCount[i].toUpperCase())){
player_2.setScores(player_2.getScores() + 1);
}
if("E".equals(scoresCount[i].toUpperCase())){
break;
}
if(player_1.getScores() >= limit && player_1.getScores() - player_2.getScores() > 1){
player_1.setWinningRounds(player_1.getWinningRounds() + 1);
player_1.getEveryRoundScores().add(player_1.getScores());
player_1.setScores(0);
player_2.getEveryRoundScores().add(player_2.getScores());
player_2.setScores(0);
}
if(player_2.getScores() >= limit && player_2.getScores() - player_1.getScores() > 1){
player_2.setWinningRounds(player_2.getWinningRounds() + 1);
player_2.getEveryRoundScores().add(player_2.getScores());
player_2.setScores(0);
player_1.getEveryRoundScores().add(player_1.getScores());
player_1.setScores(0);
}
}
if(player_1.getScores() != 0 || player_2.getScores() != 0){
player_1.getEveryRoundScores().add(player_1.getScores());
player_1.setScores(0);
player_2.getEveryRoundScores().add(player_2.getScores());
player_2.setScores(0);
}
if(player_1.getEveryRoundScores().size() != player_2.getEveryRoundScores().size()){
throw new IllegalStateException("统计异常");
}else{
System.out.print("以" + limit + "分记,比赛结果为:");
for(int i = 0; i < player_1.getEveryRoundScores().size(); i++){
System.out.print(" (" + player_1.getEveryRoundScores().get(i) + " : " + player_2.getEveryRoundScores().get(i) + ")");
}
System.out.print("\t比赛结果为 ");
System.out.println(player_1.getWinningRounds() + " : " + player_2.getWinningRounds());
}
}
public void setReadFileService(ReadFileService readFileService){
this.readFileService = readFileService;
}
public ReadFileService getReadFileService(){
if(readFileService == null){
readFileService = new ReadFileServiceImpl();
}
return readFileService;
}
public static void main(String[] args){
RefereeServiceImpl rs = new RefereeServiceImpl();
rs.referee(5);
rs.referee(6);
rs.referee(7);
rs.referee(8);
rs.referee(9);
rs.referee(10);
rs.referee(11);
rs.referee(21);
}
}
补充:Java , Java相关