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

news2025/1/11 20:45:46

版本说明

当前版本号[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
    
  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
    
  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
    
  4. 最后,输出两种计算方式下的偶数和。

# 输出结果
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.

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  # 下一个节点
    
  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  # 返回结果列表
    
  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  # 返回原始头节点

参考代码

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)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1213669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机应用从零开始(三)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序-CSDN博客 目录 1. 用单片机控制第一个灯亮 2. 认识单片…

<MySQL> 查询数据进阶操作 -- 联合查询

目录 一、什么是笛卡尔积&#xff1f; 二、什么是联合查询&#xff1f; 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…

C语言:简单的用二维数组打印杨氏三角

杨辉三角&#xff0c;又称帕斯卡三角&#xff0c;是一个数学上的规律图形。它的构造规则如下&#xff1a; 每一行的两个端点数字是1。从第三行开始&#xff0c;每个数字是它上方两个数字的和。每一行数字左右对称。 #include<stdio.h> int main() {int arr[50][50];//定…

应用架构的演进 I 使用无服务器保证数据一致性

在微服务架构中&#xff0c;一个业务操作往往需要跨多个服务协作完成&#xff0c;包含了读取数据和更新多个服务的数据同时进行。在数据读取和写入的过程中&#xff0c;有一个服务失败了&#xff0c;势必会造成同进程其他服务数据不一致的问题。 亚马逊云科技开发者社区为开发者…

笔试面试相关记录(13)

&#xff08;1&#xff09;一个链表&#xff0c;当一个结点为偶数&#xff0c;且它前面的结点为奇数时&#xff0c;将这个节点合并到前面的结点中&#xff0c;一直执行这个操作&#xff0c;知道没有满足条件的结点时。 输入如下&#xff1a;{2,3,4,1,2,2,3} 输出&#xff1a;…

windiws docker 部署jar window部署docker 转载

Windows环境下从安装docker到部署前后端分离项目(springboot+vue) 一、前期准备 1.1所需工具: 1.2docker desktop 安装 二、部署springboot后端项目 2.1 部署流程 三、部署vue前端项目 3.1相关条件 3.2部署流程 四、前后端网络请求测试 一、前期准备 1.1所需工具: ①docke…

炒现货黄金怎么做?挖掘黄金的投资机会

黄金一直以来都是备受投资者追捧的避险资产&#xff0c;其价值和潜力是无法忽视的。而炒现货黄金作为一种快速获取收益的投资方式&#xff0c;备受关注。那么&#xff0c;如何在炒现货黄金中找到投资机会呢&#xff1f;为您详细解析&#xff0c;简单易懂&#xff0c;帮助您开启…

[PyTorch][chapter 63][强化学习-QLearning]

前言&#xff1a; 这里结合走迷宫的例子,重点学习一下QLearning迭代更新算法 0,1,2,3,4 是房间&#xff0c;之间绿色的是代表可以走过去。 5为出口 可以用下图表示 目录&#xff1a; 策略评估 策略改进 迭代算法 走迷宫实现Python 一 策略评估 强化学习最终是为了…

247:vue+openlayers 根据坐标显示多边形(3857投影),计算出最大幅宽

第247个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中根据坐标显示多边形(3857投影),计算出最大幅宽。这里先通过Polygon来显示出多边形,利用getExtent() 获取3857坐标下的最大最小x,y值,通过ransformExtent转换坐标为4326, 通过turf的turf.distance和计算…

Winodws核心编程 多线程

目录 一、基本概念 二、线程创建函数 三、Windows内核对象与句柄 四、简单的多线程案例 五、线程同步 - 互斥对象 六、多线程实现群聊的服务端和客户端 七、线程同步 - 事件对象 八、事件对象 与 互斥对象区别 九、线程同步 - 信号量 十、线程同步 - 关键代码段 十一…

HC^2:基于混合对比学习的多场景广告预估建模

1. 摘要 多场景广告预估建模旨在利用多场景的数据来训练统一的预估模型&#xff0c;以提高各个场景的效果。尽管现有研究方法在推荐/广告领域已取得了不错的提效&#xff0c;但现有的建模方式仍然缺乏跨场景关系的考虑&#xff0c;从而导致模型学习能力的限制和场景间相互关系建…

企业APP软件定制开发的关键步骤|网站小程序搭建

企业APP软件定制开发的关键步骤|网站小程序搭建 在当今数字化快速发展的时代&#xff0c;企业越来越意识到拥有自己的APP软件对于提高业务效率和用户体验的重要性。然而&#xff0c;企业APP软件定制开发并不是一项简单的任务&#xff0c;它需要经过一系列关键步骤来确保最终的产…

vagrant+virtualbox的踩坑记录

vagrant virtualbox 文章目录 vagrant virtualbox一、导入虚拟机ova文件失败二、修改虚拟机的保存位置三、无法使用xshell等软件用密码进行连接四、vagrant up失败 一、导入虚拟机ova文件失败 背景&#xff1a;手动删除了虚拟机文件导致无法重新导入相同名称虚拟机的ova文件…

redis-5.0.8主从集群搭建、不重启修改配置文件

一、环境准备 192.168.5.100 redis-01 192.168.5.101 redis-02 192.168.5.102 redis-03 关闭防火墙、能够通网 二、安装redis [rootlocalhost ~]# wget http://download.redis.io/releases/redis-5.0.8.tar.gz [rootlocalhost ~]# tar xf redis-5.0.8.tar.gz -C /usr/loca…

C进阶---自定义类型:结构体、枚举、联合

目录 一、前言 二、结构体 2.1结构体的声明 2.2特殊的声明 2.3结构体的自引用 2.4结构体变量的定义和初始化 2.5结构体内存对齐 2.6修改默认对齐数 2.7结构体传参 三、位段 3.1什么是位段 3.2位段的内存分配 3.3位段的跨平台问题 3.4位段的应用 四、枚…

IDEA 高分辨率卡顿优化

VM设置优化 -Dsun.java2d.uiScale.enabledfalse 增加该条设置&#xff0c;关闭高分切换 https://intellij-support.jetbrains.com/hc/en-us/articles/115001260010-Troubleshooting-IDE-scaling-DPI-issues-on-Windows​intellij-support.jetbrains.com/hc/en-us/articles/1…

MATLAB中uiresume函数用法

目录 语法 说明 示例 按下按钮后恢复执行 使用函数调用恢复执行 uiresume函数的功能是恢复暂停程序的执行。 语法 uiresume uiresume(f) 说明 uiresume 恢复与当前图窗 (gcf) 关联的对应 uiwait 调用暂停的程序执行。 uiresume(f) 恢复与图窗 f 关联的对应 uiwait 调用…

【C#学习】给FormClosing增加消息响应函数

第一步&#xff1a;增加消息句柄 第二步&#xff1a;编写消息函数 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {//add your code hereserialPort1.Close();}

人工智能 :一种现代的方法 第七章 逻辑智能体

文章目录 前言人工智能 &#xff1a;一种现代的方法 第七章 逻辑智能体7.1 基于知识的智能体7.2 Wumpus世界7.4 命题逻辑7.5 命题逻辑定理证明7.5.1推导和证明7.5.2 归结原理7.5.3 horn子句和限定子句7.5.4 前向链接和后向链接 7.6 有效命题逻辑模型求解7.6.1完备的回溯算法7.6…

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比 目录 分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现QPSO-SVM、PSO-SVM、SVM分类预测对比&#xff0c;运行环境Matlab2018b…