欧拉工程第22题 文件中所有名字的得分之和是多少

题目

文件names.txt (右键另存为)是一个46K大小的文本文件,包含5000多个英文名字。利用这个文件,首先将文件中的名字按照字母排序,然后计算每个名字的字母值,最后将字母值与这个名字在名字列表中的位置相乘,得到这个名字的得分。

例如将名字列表按照字母排序后, COLIN这个名字是列表中的第938个,它的字母值是 3+15+12+9+14=53 。所以COLIN这个名字的得分就是 938×53=49714 .

文件中所有名字的得分总和是多少?

解题方法

先读入这个文件,然后处理成从小到大排列的字符串数组。然后计算每个名字的字母值,乘上它的索引值,加到sum上,最后输出sum。
提示:names.txt内只有一行文本内容,开头的一些内容是,”MARY”,”PATRICIA”,”LINDA”,”BARBARA”,……

程序

// 因为存在I/O操作,可能会出现文件不存在等异常,所以必须申明throws Exception,调用slove()函数的函数也要申明throws Exception
public static void solve() throws Exception{
    FileReader fr = new FileReader("D:/p022_names.txt");
    BufferedReader br= new BufferedReader(fr);
    // 文本内容就一行,所以只读取一次
    String text = br.readLine();
    // 输入输出用完要及时关闭
    br.close();
    fr.close();
    // 清除文本中多余的引号
    text = text.replace("\"", "");
    // 以逗号为分隔符将字符串分割为字符数组
    String[] names = text.split(",");
    // 将字符串按从小到大排序
    Arrays.sort(names);
    int sum = 0;
    for (int i=0;i<names.length;i++) {
        int worth = 0;
        char[] characters = names[i].toCharArray();
        // 计算每个名字的值
        for (char c:characters) {
            // java和C一样,允许int和char型数据相互计算,'A' = 65
            worth += c - 64;
        }
        sum += worth * (i + 1);
    }
    System.out.println(sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值