题目如下:
一个典型的电话拨号盘如下:
1 2 3
4 5 6
7 8 9
* 0 #
手指在两个按键之间的移动距离被定义成这两个键的x、y坐标差的绝对值之和。比如,6到自身的距离是0,到3、5、9的距离是1,到2、4、8、#的距离是2,到1、7、0的距离是3,到*的距离是4。
现在要你算一下,拨一个号手指所需要移动的最小距离是多少?假设手指初始位置在“5”。
输入
一行,一个字符串,表示需要拨的电话号码。
输入约束
电话号码的每一位仅包含数字“0”到“9”,且总长度范围是 [3,20]
输出
一个整数,表示拨完这个号码手指最少需要移动的距离
例子
输入
911
输出
6
这个题就是一个道曼哈顿距离问题。
但是我用python简单实现为
import sys
line = sys.stdin.readline().strip()
call={'1': (1, 1),
'2': (1, 2),
'3': (1, 3),
'4': (2, 1),
'5': (2, 2),
'6': (2, 3),
'7': (3, 1),
'8': (3, 2),
'9': (3, 3),
'*': (4, 1),
'0': (4, 2),
'#': (4, 3),
}
org = '5'
o_l = call.get(org)[0]
o_r = call.get(org)[1]
ll = 0
for d in line:
t_l = call.get(d)[0]
t_r = call.get(d)[1]
ll += (abs(o_l-t_l) + abs(o_r - t_r))
o_l = call.get(d)[0]
o_r = call.get(d)[1]
print ll