版本说明
当前版本号[20231115]。
版本 | 修改说明 |
---|---|
20231115 | 初版 |
目录
输入起始和结束的正整数,求其两个正整数之间的偶数和。
题目
输入起始和结束的正整数,求其两个正整数之间的偶数和。
解题思路
- 首先,通过
input()
函数获取用户输入的起始数和结束数。 - 然后,将这两个输入的字符串转换为整数类型,分别赋值给变量
a
和b
。 - 初始化两个变量
sum1
和sum2
,用于存储两种不同计算方式下的偶数和。 - 使用第一个for循环遍历从
a
到b+1
的所有整数(包括b
),判断每个整数是否为偶数。如果是偶数,则将其加到sum1
中,并将当前整数加2;如果不是偶数,则将当前整数加1。这样可以确保在计算偶数和时,只考虑偶数。 - 使用第二个for循环遍历从
a+1
到b
的所有整数(不包括b
),同样判断每个整数是否为偶数。如果是偶数,则将其加到sum2
中,并将当前整数加2;如果不是偶数,则将当前整数加1。这样可以确保在计算偶数和时,不考虑边界上的奇数。 - 最后,输出两种计算方式下的偶数和。
代码思路
-
首先,通过input函数获取用户输入的起始数和结束数,并将它们转换为整数类型。然后,初始化两个变量sum1和sum2,分别用于存储两种不同计算方式下的偶数和。
# 获取用户输入的起始数和结束数 x1 = input("请输入起始数:") x2 = input("请输入结束数:") # 将输入的字符串转换为整数 a = int(x1) b = int(x2) # 初始化偶数和为0 sum1 = 0 # 初始化偶数和为0 sum2 = 0
-
接下来,使用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
-
同样地,使用另一个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
-
最后,输出两种计算方式下的偶数和。
# 输出结果
print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时算这两个边界)是:"+str(sum1))
print(str(a)+"到"+str(b)+"之间的偶数和(边界是偶数时不算两个边界)是:"+str(sum2))
参考代码
这段代码的主要是计算给定范围内(包括边界)的偶数和。
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))
两数相加
题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 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
题目数据保证列表表示的数字不含前导零
解题思路
- 初始化一个空链表,用于存储相加后的结果。
- 初始化两个指针,分别指向两个链表的头节点。
- 初始化一个变量 carry,用于记录进位值。
- 当两个链表都不为空时,执行以下操作: a. 计算当前位置的两个节点的值之和,加上进位值。 b. 如果和大于等于10,更新进位值为1,否则进位值为0。 c. 将和对10取余,作为新节点的值。 d. 将新节点添加到结果链表的末尾。 e. 移动两个指针到下一个节点。
- 如果其中一个链表已经遍历完,但另一个链表还有剩余节点,那么将剩余节点的值依次加到结果链表的末尾,并考虑进位值。
- 如果最后还有进位值,那么在结果链表的末尾添加一个新节点,值为进位值。
- 返回结果链表的头节点。
代码思路
-
首先定义了一个链表节点类ListNode,包含节点值val和指向下一个节点的指针next。
# 定义链表节点类 class ListNode: def __init__(self, val=0, next=None): self.val = val # 节点值 self.next = next # 下一个节点
-
然后定义了一个链表类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 # 返回结果列表
-
接着定义了一个解决方案类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 # 返回原始头节点
参考代码
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)))