今日头条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
利用权重来实现
例如
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; }
相关文章推荐
- 今日头条2018实习生在线编程笔试题
- 括号匹配--今日头条2017年实习生招聘笔试题
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- 今日头条2017后端工程师实习生笔试题
- 今日头条研发算法岗实习生笔试题解答篇_0324晚
- 今日头条研发算法岗实习生笔试题题目篇_0324晚
- [今日头条] 2017客户端工程师实习生笔试题
- 木棒拼图(multiset 的应用)----今日头条2017后端工程师实习生笔试题
- 2017年腾讯实习生在线笔试编程题(1)
- 算法面试题-今日头条2017客户端工程师实习生笔试题4:或与加
- 2017今日头条前端实习生笔试题
- 今日头条2017客户端工程师实习生笔试题(回文解码)
- 今日头条2017暑期实习生招聘笔试编程题之函数最宽尖峰
- 【牛客网】今日头条2017客户端工程师实习生笔试题
- 今日头条2017后端工程师实习生笔试题——最大映射
- 今日头条2017后端工程师实习生笔试题
- 今日头条2017客户端工程师实习生笔试题
- 今日头条2017实习生笔试题解
- 今日头条2017后端工程师实习生笔试题
- 登山策略(今日头条笔试题)?待解决