当前位置: 代码迷 >> 综合 >> 欧拉工程第22题:Names scores
  详细解决方案

欧拉工程第22题:Names scores

热度:26   发布时间:2023-12-13 07:19:17.0

题目链接:https://projecteuler.net/problem=23
对文件夹中的名字求总得分。
求分方法:
1.对文件排序
2.字母值 * 排序后的名字所在的位置
注意: 字母值:例如:abs =1+2+3=6

思路:
1.读取文件:开始读取文件用split(“,”)以逗号划分成字符串数组,但是每个名字的双引号还在的,对后面的排序影响比较大,在网上看到这个line.replace(“\”“, “”).split(“,”)先过滤掉“”在以,分割成字符串数组。java正则
2.下面就是数学的问题了。

package projecteuler21to30;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;class level22{void solve(){String filename="src\\projecteuler21to30\\p022_names.txt";String[] names=ReadTxtFile(filename);for (int i=0;i<names.length;i++)System.out.println(names[i]);int total=0;Arrays.sort(names);for(int i=0;i<names.length;++i){int sum=0;for(char ch:names[i].toCharArray()){sum+=ch-'A'+1;}total+=(i+1)*sum;}System.out.println("名字总得分:"+total);}String[] ReadTxtFile(String filename){File fl=new File(filename);String line=null;String[] str = null;try {BufferedReader br=new BufferedReader(new FileReader(fl));try {while((line=br.readLine())!=null){
   //就一行,一次读完了str=line.replace("\"", "").split(",");//replace 正则把\"" 变成空的}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return str;}
}
public class Problem22 {
    public static void main(String[] args){Date beginTime=new Date();new level22().solve();//871198282Date endTime=new Date();long Time = endTime.getTime()-beginTime.getTime();System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");}
}
  相关解决方案