项目欧拉#22 Java

时间:2015-07-05 22:28:33

标签: java functional-programming

我一直在尝试解决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;
    }
}

2 个答案:

答案 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;

    }