【发布时间】:2015-01-23 02:42:23
【问题描述】:
使用 names.txt(右键单击并“将链接/目标另存为...”),一个 46K 的文本文件,其中包含超过 5000 个名字,首先按字母顺序对其进行排序。然后计算出每个名称的字母值,将该值乘以其在列表中的字母位置以获得名称分数。
例如,当列表按字母顺序排序时,COLIN 的值是 3 + 15 + 12 + 9 + 14 = 53,是列表中的第 938 个名称。因此,COLIN 将获得 938 53 = 49714 的分数。
文件中所有名称分数的总和是多少?
我得到的是 863833348,但正确答案是 871198282。我不知道出了什么问题,我尝试了所有方法但无法找出问题所在。
代码:
public static void main(String args[]) throws IOException {
String alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Pattern testRegEx=Pattern.compile("[^\\\"]\\w+[^\\\",]");
String line;
String filePath="//Users//painkillerfff//Documents//names.txt";
BufferedReader readTextFile=new BufferedReader(new FileReader(filePath));
List<String> nameList=new ArrayList<String>();
while((line=readTextFile.readLine())!=null){
//System.out.println(line);
Matcher matcher=testRegEx.matcher(line);
while(matcher.find()){
nameList.add(matcher.group());
//System.out.println(matcher.group());
}
}
Collections.sort(nameList);
long sumOfWords=0;
long namePoint=0;
long nameRank=1;
for(String name: nameList){
namePoint=0;
for(int i=0;i<name.length();i++){
namePoint+=alphabet.indexOf(name.charAt(i))+1;
}
namePoint=namePoint*nameRank;
sumOfWords+=namePoint;
nameRank++;
}
System.out.println("The Total Points is: "+sumOfWords);
}
【问题讨论】:
-
确保正在处理名字和姓氏。那个正则表达式在做什么?
-
该文件仅包含姓名,没有姓氏或名字分类。这是文件projecteuler.net/project/names.txt 的链接。感谢您的回复。
-
我的意思是,验证文件中的名字和文件中的姓氏,正在处理中。也就是说,您不会将其中一个放入位桶中。
-
我只是想强调这不是一个家庭作业问题,我只是出于兴趣才这样做。如果这就是否决票的原因。无论如何感谢您的回复。
-
我已经验证过了,它实际上是在处理输入文件中的姓氏和输入文件中的名字。