• CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)


    版本说明

    当前版本号[20231115]。

    版本修改说明
    20231115初版

    目录

    输入起始和结束的正整数,求其两个正整数之间的偶数和。

    题目

    输入起始和结束的正整数,求其两个正整数之间的偶数和。

    解题思路

    1. 首先,通过input()函数获取用户输入的起始数和结束数。
    2. 然后,将这两个输入的字符串转换为整数类型,分别赋值给变量ab
    3. 初始化两个变量sum1sum2,用于存储两种不同计算方式下的偶数和。
    4. 使用第一个for循环遍历从ab+1的所有整数(包括b),判断每个整数是否为偶数。如果是偶数,则将其加到sum1中,并将当前整数加2;如果不是偶数,则将当前整数加1。这样可以确保在计算偶数和时,只考虑偶数。
    5. 使用第二个for循环遍历从a+1b的所有整数(不包括b),同样判断每个整数是否为偶数。如果是偶数,则将其加到sum2中,并将当前整数加2;如果不是偶数,则将当前整数加1。这样可以确保在计算偶数和时,不考虑边界上的奇数。
    6. 最后,输出两种计算方式下的偶数和。

    代码思路

    1. 首先,通过input函数获取用户输入的起始数和结束数,并将它们转换为整数类型。然后,初始化两个变量sum1和sum2,分别用于存储两种不同计算方式下的偶数和。

      # 获取用户输入的起始数和结束数
      x1 = input("请输入起始数:")
      x2 = input("请输入结束数:")
      
      # 将输入的字符串转换为整数
      a = int(x1)
      b = int(x2)
      
      # 初始化偶数和为0
      sum1 = 0
      
      # 初始化偶数和为0
      sum2 = 0
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    2. 接下来,使用for循环遍历从a到b(包括b)的所有整数。在循环中,判断当前整数是否为偶数,如果是偶数,则将其加到sum1中,并将i增加2;如果不是偶数,则将i增加1。这样可以确保在计算偶数和时,只考虑偶数。

      # 遍历从a到b(包括b)的所有整数,计算偶数和
      for i in range(a, b+1):
          if i % 2 == 0:
              sum1 += i
              i += 2
          else:
              i += 1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. 同样地,使用另一个for循环遍历从a+1到b-1(不包括b)的所有整数。在循环中,同样判断当前整数是否为偶数,如果是偶数,则将其加到sum2中,并将i增加2;如果不是偶数,则将i增加1。这样可以确保在计算偶数和时,不考虑边界上的奇数。

      # 遍历从a+1到b-1(不包括b)的所有整数,计算偶数和
      for i in range(a+1, b):
          if i % 2 == 0:
              sum2 += i
              i += 2
          else:
              i += 1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    4. 最后,输出两种计算方式下的偶数和。

    # 输出结果
    print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时算这两个边界)是:"+str(sum1))
    print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时不算两个边界)是:"+str(sum2))
    
    • 1
    • 2
    • 3

    参考代码

    这段代码的主要是计算给定范围内(包括边界)的偶数和。

    x1 = input("请输入起始数:")
    x2 = input("请输入结束数:")
    a = int(x1)
    b = int(x2)
    sum1 = 0
    for i in range(a, b+1):
        if i % 2 == 0:
            sum1 += i
            i += 2
        else:
            i += 1
    sum2 = 0
    for i in range(a+1, b):
        if i % 2 == 0:
            sum2 += i
            i += 2
        else:
            i += 1
    print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时算这两个边界)是:"+str(sum1))
    print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时不算两个边界)是:"+str(sum2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    两数相加

    题目

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

    你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例 1:

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.

    image-20231115233116887

    示例 2:

    输入:l1 = [0], l2 = [0]
    输出:[0]

    示例 3:

    输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    输出:[8,9,9,9,0,0,0,1]

    提示:

    每个链表中的节点数在范围 [1, 100] 内
    0 <= Node.val <= 9
    题目数据保证列表表示的数字不含前导零

    解题思路

    1. 初始化一个空链表,用于存储相加后的结果。
    2. 初始化两个指针,分别指向两个链表的头节点。
    3. 初始化一个变量 carry,用于记录进位值。
    4. 当两个链表都不为空时,执行以下操作: a. 计算当前位置的两个节点的值之和,加上进位值。 b. 如果和大于等于10,更新进位值为1,否则进位值为0。 c. 将和对10取余,作为新节点的值。 d. 将新节点添加到结果链表的末尾。 e. 移动两个指针到下一个节点。
    5. 如果其中一个链表已经遍历完,但另一个链表还有剩余节点,那么将剩余节点的值依次加到结果链表的末尾,并考虑进位值。
    6. 如果最后还有进位值,那么在结果链表的末尾添加一个新节点,值为进位值。
    7. 返回结果链表的头节点。

    代码思路

    1. 首先定义了一个链表节点类ListNode,包含节点值val和指向下一个节点的指针next。

      # 定义链表节点类
      class ListNode:
          def __init__(self, val=0, next=None):
              self.val = val  # 节点值
              self.next = next  # 下一个节点
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 然后定义了一个链表类LinkList,包含一个头节点head,以及初始化链表的方法initList和将链表转换为列表的方法convert_list。

      
      # 定义链表类
      class LinkList:
          def __init__(self):
              self.head = None  # 链表头节点
      
          # 初始化链表
          def initList(self, data):
              self.head = ListNode(data[0])  # 创建头节点
              r = self.head  # 记录头节点
              p = self.head  # 当前节点
              for i in data[1:]:
                  node = ListNode(i)  # 创建新节点
                  p.next = node  # 将新节点添加到当前节点的后面
                  p = p.next  # 更新当前节点为新节点
              return r  # 返回头节点
      
          # 将链表转换为列表
          def convert_list(self, head):
              ret = []  # 结果列表
              if head == None:
                  return ret  # 如果链表为空,返回空列表
              node = head  # 从头节点开始遍历
              while node != None:
                  ret.append(node.val)  # 将节点值添加到结果列表中
                  node = node.next  # 移动到下一个节点
              return ret  # 返回结果列表
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
    3. 接着定义了一个解决方案类Solution,包含一个方法addTwoNumbers,用于实现两个链表的相加操作。

    # 定义解决方案类
    class Solution:
        # 两个数字相加
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
            lrr = l1  # 记录原始头节点
            while True:
                l1.val = l1.val + l2.val  # 计算当前节点的值
                if l1.next is None and l2.next is None and l1.val < 10:
                    break  # 如果两个链表都遍历完毕且当前节点的值小于10,跳出循环
                if l1.next is None:
                    l1.next = ListNode(0)  # 如果当前节点是最后一个节点,添加一个值为0的节点
                if l2.next is None:
                    l2.next = ListNode(0)  # 如果当前节点是最后一个节点,添加一个值为0的节点
                if l1.val >= 10:
                    l1.val = l1.val - 10  # 如果当前节点的值大于等于10,减去10并进位
                    l1.next.val += 1  # 进位后的数值加到下一个节点上
                l1 = l1.next  # 移动到下一个节点
                l2 = l2.next  # 移动到下一个节点
            return lrr  # 返回原始头节点
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    参考代码

    class ListNode:
        def __init__(self, val=0, next=None):
            self.val = val
            self.next = next
    class LinkList:
        def __init__(self):
            self.head=None
        def initList(self, data):
            self.head = ListNode(data[0])
            r=self.head
            p = self.head
            for i in data[1:]:
                node = ListNode(i)
                p.next = node
                p = p.next
            return r
        def    convert_list(self,head):
            ret = []
            if head == None:
                return
            node = head
            while node != None:
                ret.append(node.val)
                node = node.next
            return ret
    class Solution:
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
            lrr = l1
            while True:
                l1.val = l1.val + l2.val
                if l1.next is None and l2.next is None and l1.val < 10:
                    break
                if l1.next is None:
                    l1.next = ListNode(0)
                if l2.next is None:
                    l2.next = ListNode(0)
                if l1.val >= 10:
                    l1.val = l1.val - 10
                    l1.next.val += 1
                l1 = l1.next
                l2 = l2.next
            return lrr
    # %%
    l = LinkList()
    list1 = [2,4,3]
    list2 = [5,6,4]
    l1 = l.initList(list1)
    l2 = l.initList(list2)
    s = Solution()
    print(l.convert_list(s.addTwoNumbers(l1, l2)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    禁止运行游戏的程序开发
    如何合并为pdf文件?合并为pdf文件的方法
    插件收集(idea Communtity Edtion)
    GoLand 2023.2.3(go语言开发)
    ReLU,Sigmoid,Tanh,softmax【基础知识总结】
    C语言 : 文件的操作
    DBCO-PEG-Ciprofloxacin 二苯并环辛炔-聚乙二醇-环丙沙星 DBCO-PEG-环丙沙星
    2586. 统计范围内的元音字符串数 --力扣 --JAVA
    一文彻底弄懂Linux-Shell编程
    Adobe Acrobat Pro DC 2023:提升工作效率,激发创意灵感 mac/win版
  • 原文地址:https://blog.csdn.net/weixin_65106708/article/details/134431939