在Python中查找最接近n的所有数字都是奇数的数字

在Python中查找最接近n的所有数字都是奇数的数字

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

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

要解决此问题,请按如下步骤操作−

  • first_even := -1
  • s := 将n转换为字符串
  • l := s的长度
  • 对于i在0到l的范围内,执行以下操作
    • 如果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在i + 1到l的范围内,执行以下操作
    • big := big连接”1″
    • small := small连接”9″
  • big := big的数字值,small := small的数字值
  • d2 := big – n,d1 := n – small
  • 如果d1<d2,则
    • 返回 small
  • 否则,当d1≥d2时,则
    • 返回big

请看以下实现以更好地理解−

更多Python相关文章,请阅读:Python 教程

示例

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

输出

199

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程