【趣学Python算法100例】求车速
问题描述
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数,该数仍为5位数。问该车的速度是多少?新的对称数是多少?
问题分析
要解决这个问题,可以按照以下思路进行:
- 理解对称数:一个五位数的对称数可以表示为 (abcba),其中a、b、c是数字。
- 已知条件:
- 初始对称数是
95859
。 - 司机在上午 10 点看到这个数,两个小时后会有新的对称数。
- 初始对称数是
- 计算时间:在两个小时后,车的行驶距离是速度乘以时间。
- 枚举对称数:可以列出所有可能的五位对称数,从 95859 开始向上寻找,直到找到下一个对称数。对称数的范围是从
10001
到99999
。 - 计算速度:一旦找到新的对称数 (n),可以通过以下公式计算速度:
[ 速度 = n − 95859 2 ] [ \text{速度} = \frac{n - 95859}{2} ] [速度=2n−95859]
代码实现
- 从 95859 开始,逐一检查下一个五位数是否为对称数。
- 找到第一个满足条件的对称数后,计算速度。
下面是 Python 代码示例,实现上述思路:
def is_palindrome(num):return str(num) == str(num)[::-1]def find_next_palindrome(start):current = start + 1while current < 100000: # 最大五位数if is_palindrome(current):return currentcurrent += 1return None# 初始对称数
initial_palindrome = 95859# 找到下一个对称数
next_palindrome = find_next_palindrome(initial_palindrome)if next_palindrome:# 计算速度speed = (next_palindrome - initial_palindrome) / 2print("新的对称数是:", next_palindrome)print("汽车的速度是:", speed)
else:print("没有找到新的对称数。")
运行这段代码,可以找到新的对称数及汽车的速度。