当前位置:编程学习 > JAVA >>

ACM水题-乒乓球 求解答

java: 乒乓球比赛练习题 读一个txt文件   文件内容:WWWWWLLWWWLLWWWLWLWWWWLLLWWWLLLWWWWLLLE
w: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相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,