您的位置:首页 > 编程语言 > PHP开发

今日头条2017年实习生在线笔试题1

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

利用权重来实现

例如

ABC 各位上的权重为A:100; B:10; C:1

BCA 各位上的权重为B:100; C:10; A:1

字母A的总权重100+1 = 101;字母B的总权重10+100=110;字母C的总权重为1+10=11

<?php
$arr = ['ABC','BCA'];
echo maxSumStr($arr);

function maxSumStr($arr){
$max = 9;
//权重
$weight = array('A'=>0,'B'=>0,'C'=>0,'D'=>0,'E'=>0,'F'=>0,'G'=>0,'H'=>0,'I'=>0,'J'=>0);

foreach ($arr as $key => $str) {
$arr[$key] = str_split($str);
}

for ($i=0;$i<count($arr);$i++){
for($j=count($arr[$i])-1;$j>=0;$j--){
$p = 1;//倍率初始值
$x = count($arr[$i])-1 - $j;//处于第几位
while($x>0){
$p*=10;
--$x;
}
$weight[$arr[$i][$j]] += $p;
}
}

arsort($weight);
foreach ($weight as $k => $v) {
$weight[$k] = $max--;
}

//计算总和
$sum = 0;
foreach ($arr as $key => $str) {
$p = 1;
$num = 0;
for($i=count($str)-1;$i>=0;$i--){
$num += $weight[$str[$i]]*$p;
$p*=10;
}
$sum += $num;
}

return $sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 今日头条