首页 > 学院 > 开发设计 > 正文

今日头条2017后端工程师实习生笔试题——最大映射

2019-11-08 19:38:07
字体:
来源:转载
供稿:网友
[编程题] 最大映射

有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大?

输入描述:

每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不超过 12 且仅包含大写字母 A-J 的字符串。 n 不大于 50,且至少存在一个字符不是任何字符串的首字母。

输出描述:

输出一个数,表示最大和是多少。

输入例子:
2ABCBCA
输出例子:
1875
import java.util.Arrays;import java.util.Scanner;public class Main{	public static void main(String[] args){		long[] scores=new long[100];		boolean[] flag=new boolean[100];		int nums;		Scanner sc=new Scanner(System.in);		while(sc.hasNextInt()){			nums=sc.nextInt();			for(int m=0;m<10;m++){				scores[m]=0l;				flag[m]=false;			}			for(int i=0;i<nums;i++){					String a=sc.next();				int la=a.length();				for(int j=0;j<la;j++){					int indexnow=a.charAt(j)-65;					scores[indexnow]+=(long)(Math.pow(10,la-j-1));					if(j==0&&la>1)						flag[indexnow]=true;					}			}				int digit=1,firstdigit=1;long result=0;long firstDigit=5000000000000l;			for(int i=0;i<10;i++){				if(scores[i]<firstDigit&&flag[i]==false){					firstDigit=scores[i];					firstdigit=i;				}							}			for(int i=firstdigit;i<9;i++){				scores[i]=scores[i+1];			}			Arrays.sort(scores,0,9);			for(int i=0;i<9;i++){				result+=scores[i]*digit;				digit++;			}			System.out.PRintln(result);			}		}		}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表