Python程序:查找所有数字均为奇数的n的最近数
假设我们有一个数字n,我们必须找到下一个最接近的值,其中所有数字都是奇数。当有两个值与最接近n的值相同时,返回较大的值。
因此,如果输入类似于n = 243,则输出将为199。
为了解决这个问题,我们将遵循以下步骤:
- first_even := -1
- s := 将n转换为字符串
- l := s的长度
- 对于范围0到l中的i:
- 如果s[i]为偶数,则
- first_even := i
- 退出循环
- 如果s[i]为偶数,则
- 如果first_even等于-1,则
- 返回n
- big := s(从索引0到i)的数值 + 1
- 如果s[i]等于"0",则
- 如果s[i - 1]等于"1",则
- small := s(从索引0到i)的数值 - 1
- 否则
- small := s(从索引0到i)的数值 - 11
- 如果s[i - 1]等于"1",则
- 否则
- small := s(从索引0到i)的数值 - 1
- 对于范围i + 1到l中的i:
- big := big连接"1"
- small := small连接"9"
- big := big的数值,small := small的数值
- d2 := big - n,d1 := n - small
- 如果d1 < d2,则
- 返回small
- 否则(如果d1 >= d2),则
- 返回big
让我们看看下面的实现,以便更好地理解:
示例
class Solution: def solve(self, n): first_even = -1 s = str(n) l = len(s) for i in range(l): if int(s[i]) % 2 == 0: first_even = i break if first_even == -1: return n big = str(int(s[: i + 1]) + 1) if s[i] == "0": if s[i - 1] == "1": small = str(int(s[: i + 1]) - 1) else: small = str(int(s[i : i + 1]) - 11) else: small = str(int(s[: i + 1]) - 1) for i in range(i + 1, l): big += "1" small += "9" big, small = int(big), int(small) d2 = big - n d1 = n - small if d1 < d2: return small elif d1 >= d2: return big ob = Solution() n = 243 print(ob.solve(n))
输入
243
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
输出
199
广告