Python程序:查找所有数字均为奇数的n的最近数


假设我们有一个数字n,我们必须找到下一个最接近的值,其中所有数字都是奇数。当有两个值与最接近n的值相同时,返回较大的值。

因此,如果输入类似于n = 243,则输出将为199。

为了解决这个问题,我们将遵循以下步骤:

  • first_even := -1
  • s := 将n转换为字符串
  • l := s的长度
  • 对于范围0到l中的i:
    • 如果s[i]为偶数,则
      • first_even := 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
  • 否则
    • 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

更新于:2020年12月2日

523 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告