得分(Score,ACM/ICPC Seoul 2005, UVa 1585)
给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0。
例如:OOXXOXXOOO的得分为:1+2+0+0+1+0+0+1+2+3 = 10
JAVA代码如下:
package com.bean.algorithmexec;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScoreUva1585 {
static int Answer;
static String target;
private static Scanner sc;
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
/*
* 在构造文本文件时,一定要注意每一行结尾空格的影响。需要去掉每行结尾的空格,否则计算结果错误。
* */
sc = new Scanner(new FileInputStream("G:\\scoreuva1585.txt"));
while (sc.hasNextLine()) {
int length, sum, num;
//每次需要将计数器清零
length = sum = num = 0;
// 读取文件中的输入字符串
target = sc.nextLine();
// 获取字符串的长度
length = target.length();
//将字符串转化为字符数组
char[] targetArray = new char[length];
targetArray = target.toCharArray();
//算法逻辑
for (int i = 0; i < targetArray.length; i++) {
if (targetArray[i] == 'X') {
num = 0;
continue;
}
num++;
sum += num;
Answer = sum;
}
//输出结果
System.out.println("# Case:" + " " + Answer);
}
}
}
文件输入的内容:
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
输入结果:
’ # Case: 10
’ # Case: 9
’ # Case: 7
’ # Case: 55
’ # Case: 30