我一直在尝试解决Project Euler的问题22,我知道我接近答案,但我无法看到我的代码中的错误。任何想法都会有所帮助(包括Java命名约定)。
使用names.txt(右键单击和“保存链接/目标为...”),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序。然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数。
例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。因此,COLIN将获得938×53 = 49714的分数。
文件中所有名称分数的总和是多少?
我的代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
public class Problem22 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ArrayList<String> names = new ArrayList<String>();
BufferedReader numReader = new BufferedReader(new FileReader("src/names.txt"));
String line = "";
while ((line = numReader.readLine()) != null) {
String[] dataNames = line.split(",");
for (String item : dataNames) {
String newItem = item.substring(1, item.length() - 1);
names.add(newItem);
}
}
numReader.close();
Collections.sort(names);
long bigSum = 0;
int mult = 1;
for (int i = 0; i < names.size(); i++) {
int x = valueOfName(names.get(i));
mult = x * i;
bigSum += mult;
}
System.out.println("Sum: " + bigSum);
}
public static int valueOfName(String s) {
char[] ABC = {'1', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char[] tempName = s.toCharArray();
int sum = 0;
for (char c : tempName) {
for (int j = 0; j < ABC.length; j++) {
if (c == ABC[j])
sum += j;
}
}
return sum;
}
}
答案 0 :(得分:0)
在valueOfName()
:
for(int j = 0; j <= ABC.length; j++){
if(c == ABC[j-1])
sum += j-1;
}
答案 1 :(得分:0)
SPOILER ALERT。对问题的正确回答
感谢所有花时间回答我问题的人。我发现了这个问题!
for(int i = 0; i < names.size(); i++){
int x = valueOfName(names.get(i));
mult = x * (i + 1); //Was missing "+1" because index starts at 0
bigSum += mult;
}