Python算法100例-3.2 水仙花数

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.问题拓展
  • 7.巧用字符串技巧

1.问题描述

输出所有的“水仙花数”。所谓的“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身,例如,153是“水仙花数”,因为 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33

2.问题分析

根据“水仙花数”的定义,判断一个数是否为“水仙花数”最重要的是要把给出的三位数的个位、十位和百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等,则该三位数为“水仙花数”,反之,则不是。

3.算法设计

“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100~999。对应的循环条件如下:

for n in range(100, 1000):

1)将n整除以100,得出n在百位上的数字hun。

2)将(n-hun×100)整除以10(或将n先整除以10再对10求模,即n//10%10),得出n在十位上的数字ten。

3)将n对10取余,得出n在个位上的数字ind。

4)求得这三个数字的立方和是否与其本身相等,若相等,则该数为“水仙花数”。

对于每个位置上的数值将其拆分的算法有很多种,应根据不同情况选择不同的算法(对于同一问题不同算法的效率有时会相差很多)。

4.确定程序框架

程序流程图如图所示。

在这里插入图片描述

5.完整的程序

%%time
# 水仙花数

if __name__ == '__main__':
    print("result is: ")
    # 整数的取值范围
    for n in range(100, 1000):
        hun = n // 100                                      # 百位
        ten = (n - hun * 100) // 10                         # 十位
        ind = n % 10                                        # 个位
        m = hun*hun*hun + ten*ten*ten + ind*ind*ind         # 求和
        if n == m:                                          # 各位上的立方和是否与原数n相等
            print("%d \t" %n, end="\n")


result is: 
153 	
370 	
371 	
407 	
CPU times: user 1.14 ms, sys: 37 µs, total: 1.18 ms
Wall time: 1.17 ms

6.问题拓展

求某个数n的立方,可以采用程序中的方法对n连乘三次n×n×n,求五次方、十次方运用这种方法仍可忍受,但如果要求的是n的50次方甚至更大呢?也要像上面一样写50次吗?对于编程者来说这是很痛苦的一种事情,既浪费时间又浪费精力。因此,Python语言为我们提供了幂运算符“**”,例如求5的3次方,可以表示为5**3,故我们可以换一种写法,程序代码如下:

%%time
#  水仙花数

if __name__ == '__main__':
    print("result is: ")
    for n in range(100, 1000):                      # 整数的取值范围
        hun = n // 100                              # 百位
        ten = (n - hun * 100) // 10                 # 十位
        ind = n % 10                                # 个位
        m = hun**3 + ten**3 + ind**3
        if n == m:                                  # 各位上的立方和是否与原数n相等
            print("%d \t" %n, end="\n")

result is: 
153 	
370 	
371 	
407 	
CPU times: user 1.57 ms, sys: 0 ns, total: 1.57 ms
Wall time: 1.56 ms

7.巧用字符串函数

因本题是整数类编程,所以可先将整数转换成字符串,通过字符串列表属性找出百位、十位、个位的数字。具体代码如下:

%%time
#  巧用字符串找水仙花数

if __name__ == '__main__':
    print("result is: ")
    for n in range(100, 1000):                      # 整数的取值范围
        str_n=str(n)
        hun = int(str_n[0])                           # 百位
        ten = int(str_n[1])                # 十位
        ind = int(str_n[2])                              # 个位
        m = hun**3 + ten**3 + ind**3
        if n == m:                                  # 各位上的立方和是否与原数n相等
            print("%d \t" %n, end="\n")

result is: 
153 	
370 	
371 	
407 	
CPU times: user 2.11 ms, sys: 0 ns, total: 2.11 ms
Wall time: 2.03 ms

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C语言]——C语言常见概念(3)

目录 一.字符和ASCII编码 二.字符串和\0 三.转义字符 四.语句和语句分类 1.空语句 2.表达式语句 3.函数调用语句 4.复合语句 5.控制语句 五.注释 1.注释的2种形式 1.1 /**/ 的形式 1.2 // 的形式 2.注释会被替换 一.字符和ASCII编码 在键盘上可以敲出各种字符&am…

【UE Niagara】纳米蠕虫效果

效果 步骤 1. 新建一个Niagara系统,选择一个空模板,这里命名为“NS_Worm” 打开“NS_Worm”,重命名发射器为“Leader” 先添加“Spawn Burst Instantaneous”模块来单次生成粒子 为了让粒子持续停留在关卡中,需要在“Particle St…

MybatisPlus的使用(一)--基本配置与无条件查询

创建测试用的数据库 CREATE DATABASE mybatis_plus /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use mybatis_plus; CREATE TABLE user ( id bigint(20) NOT NULL COMMENT 主键ID, name varchar(30) DEFAULT NULL COMMENT 姓名 , age int(11) DEFAULT NULL COMMENT 年龄 , em…

JavaWeb - 1 - 概述

一.什么是Web? Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站 二.Web网站的工作流程 三.Web网站的开发模式 3.1 前后端分离开发(主流) 3.2 混合开发…

thymeleaf 一个莫名其妙的错误提示 org.attoparser.ParseException

thymeleaf 一个莫名其妙的错误提示 介绍 开发过程中遇到一个莫名奇妙的错误,一时竟然不知道怎么解决,找官网也没有找到 问题 页面显示 错误日志 org.attoparser.ParseException: (Line 96, Column 5) Malformed markup: Attribute “}” appears m…

羊大师揭秘羊奶将成为,健康新选择

羊大师揭秘羊奶将成为,健康新选择 羊奶作为一种传统的营养食品,已经在全球范围内受到了广泛的关注和认可。随着人们对健康生活的追求和对食品安全的重视,羊奶正逐渐成为健康的新选择。 羊奶的营养价值得到了科学的验证。羊奶中含有丰富的蛋…

【深度学习笔记】5_5 LeNet

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 5.5 卷积神经网络(LeNet) 在3.9节(多层感知机的从零开始实现)里我们构造了一个含单隐藏…

飞书文档批量导出

背景需求 最近所参与的项目即将结项,需要将飞书中的产品需求文档(PRD)交付给甲方,由于文档较多,大概有两百多个,一个一个的下载导出,太麻烦了(PS:本人比较懒)…

ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址: http://122.227.135.243:9666 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbach…

Jenkins 安装

目录 1、部署 Jenkins 安装配置 Jenkins 解锁 Jenkins 安装 Jenkins 插件 创建管理员账号 手动安装插件 2、Jenkins 从 GitLat 拉取代码 安装 Jenkins 插件 在 node-16 上生成密钥对 把公钥配置到 gitlab 上 把 root 用户私钥配置到 jenkins 上 Jenkins 创建一个任务…

PCSA时钟控制集成之时钟门控集成

1.4 时钟门控集成 高级时钟门控是使用每个时钟域的时钟控制器组件实现的。时钟控制器支持多个组件的时钟门控,并为每个组件提供一个Q-Channel接口。 大多数Arm组件都支持这种类型的时钟门控。大多数组件使用Q-Channel。一些较早的组件使用AXI LPI,但在…

2024全国护网行动HW行动招聘/收人!!!

2024全国护网行动HW行动招聘 溯蓉信创开始收人啦!!!现在开始收录2024HW简历,感兴趣的小伙伴扫码二维码添加微信 我们签约后,入场即预付款3k,签约后我们会在HW之前对我们的人员进行HW培训,保证上…

AI加速引擎PAI-TorchAcc:整体介绍与性能概述

作者:沈雯婷、黄奕桐、艾宝乐、王昂、李永 1、简介 PAI-TorchAcc(Torch Accelerator)是阿里云人工智能平台开发的Pytorch上的大模型训练加速框架。 PAI-TorchAcc提供了一套基于Pytorch的简洁、易用的接口,无需进行模型转换就可以无缝地接入HuggingFac…

HTTP笔记(五)

个人学习笔记(整理不易,有帮助点个赞) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一:HTTP报文首部 (1)HTTP请求报文 (2&#xff09…

【C++庖丁解牛】默认成员函数

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 前言1. 构造函数1.1 …

Linux配置网卡功能

提示:工具下载链接在文章最后 目录 一.network功能介绍二.配置network功能2.1 network_ip配置检查 2.2 network_br配置2.2.1 配置的网桥原先不存在检查2.2.2 配置的网桥已存在-修改网桥IP检查2.2.3 配置的网桥已存在-只添加网卡到网桥里检查 2.3 network_bond配置检查 2.4 netw…

数据结构与算法-选择排序

引言 在计算机科学中,数据结构和算法是两个至关重要的基石。它们共同决定了程序的效率、可读性和可维护性。本文我们将聚焦于一种基础而直观的排序算法——选择排序,并探讨其内在的工作机制以及在实际应用中的优缺点。 一、什么是选择排序? …

LeetCode 刷题 [C++] 第763题.划分字母区间

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 …

如何在Vue中实现事件处理?

Vue是一种流行的JavaScript框架,广泛应用于前端开发。在Vue中,事件处理是一个非常关键的概念,可以帮助我们实现用户与页面的交互,今天我们就来探讨一下如何在Vue中实现事件处理。 首先,让我们先了解一下在Vue中如何绑…

微信小程序开发:接入阿里云人像动漫化api接口

前面我已经把腾讯云的人像转动漫化接口接到了我的小程序里,但是和阿里云的对比后,发现阿里云的效果会更好一些,且支持更多特效,如下: 我比较喜欢这个3D特效风格,动画3D也可以,大家拭目以待。 话…