Python算法100例-3.3 阿姆斯特朗數

完整源代碼項目地址,關注博主私信'源代碼'后可獲取

  • 1.問題描述
  • 2.問題分析
  • 3.算法設計
  • 4.確定程序框架
  • 5.完整的程序
  • 6.問題拓展

1.問題描述

如果一個整數等于其各個數字的立方和,則該數稱為“阿姆斯特朗數”(亦稱為自戀性數)。如 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33,就是一個“阿姆斯特朗數”。試編程求1000以內的所有“阿姆斯特朗數”。

2.問題分析

“阿姆斯特朗數”與3.2節中的“水仙花數”的不同在于,前者并沒有規定幾位數,從兩者的定義來看,“水仙花數”可以看作是“阿姆斯特朗數”的一個子集。對于這類問題的算法與“水仙花數”類似,需要把每一位分離出來,然后比較其立方和與原數是否相等。

3.算法設計

本題求的是1000以內滿足條件的數,從數的位數來說可以分為一位數、兩位數及三位數。這樣可以根據數的位數不同分別求出不同范圍內的“阿姆斯特朗數”,即一位數(1~9)、兩位數(10~99)和三位數(100~999)分別用一個循環語句來實現。

上述方法有其局限性,如果題目改成求1 000 000以內甚至更大范圍的話,程序里面會有多個循環,不但程序看起來煩瑣,寫起來也費事,更重要的是每個循環體做的事情都是一樣的:將數的每一位拆分。對于這種重復的事情可以考慮用循環將其簡化。對于一個數無論它的位數是多少,如果要將其拆分,要么按從低位到高位的順序,要么按從高位到低位的順序。本題按從低位到高位的順序進行拆分。

從低位到高位進行拆分,每次拆分的都是當前數的個位,可以用當前數n對10求模,即n%10,這樣最后一位就被分離出來;再次分離的是原數的次低位,對于次低位,要想辦法讓其成為新數的最低位,可采用原數n對10求商的方法,即n//10。其他位置的數據求法同上。

題目給出的數據最多三位,我們可以定義三個變量分別來存儲原數的個位、十位和百位,也可以用數組來存儲,數組的長度為3。

4.確定程序框架

程序流程圖如圖所示。

在這里插入圖片描述

5.完整的程序

%%time
# 阿姆斯特朗數if __name__ == "__main__":a = [0, 0, 0]                           # 列表a用來存儲被拆分的數的個位、十位和百位print("1000以內的阿姆斯特朗數:")for i in range(2, 1000):t = 0k = i# 按從低位到高位的順序拆分數while k:a[t] = k % 10k = k // 10t += 1sum = a[0]**3 + a[1]**3 + a[2]**3if i == sum:print("%d \t " %i, end="\n")
1000以內的阿姆斯特朗數:
153 	 
370 	 
371 	 
407 	 
CPU times: user 4.22 ms, sys: 31 μs, total: 4.25 ms
Wall time: 3.71 ms

6.問題拓展

本題程序采用的是從低位到高位的順序進行分離。下面將從高位到低位順序進行拆分的程序段給出,供讀者參考。

%%time
# 阿姆斯特朗數if __name__ == "__main__":a = [0, 0, 0]                           # 列表a用來存儲被拆分的數的個位、十位和百位print("1000以內的阿姆斯特朗數:")for i in range(2, 1000):# 按從高位到低位的順序拆分數t = 0k = 1000while k >= 10:a[t] = (i % k) // (k // 10)k = k // 10t += 1sum = a[0]**3 + a[1]**3 + a[2]**3if i == sum:                        # 判斷是否為阿姆斯特朗數print("%d \t" %i, end="\n")
1000以內的阿姆斯特朗數:
153 	
370 	
371 	
407 	
CPU times: user 4.85 ms, sys: 324 μs, total: 5.18 ms
Wall time: 4.53 ms

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717027.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nacos開啟鑒權+springboot配置用戶名密碼

nacos默認沒有開啟鑒權,springboot無需用戶名密碼即可連接nacos。從2.2.2版本開始,默認控制臺也無需登錄直接可進行操作。 因此本文記錄一下如何開啟鑒權,基于nacos2.3.0版本。 編輯nacos服務端的application.properties: # 開…

Linux/Docker 修改系統時區

目錄 1. Linux 系統1.1 通過 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作環境: CentOS / AlmaOSMySQL Docker 鏡像 1. Linux 系統 1.1 通過 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的時區…

uniapp 地圖行車軌跡

文章目錄 uniapp 地圖行車軌跡1、畫地圖2、切換地圖中心點3、畫路線4、軌跡移動5、標記點及自定義內容 uniapp 地圖行車軌跡 官網地圖組件:https://uniapp.dcloud.net.cn/component/map.html 官網地圖組件控制:https://uniapp.dcloud.net.cn/api/locati…

【Java數據結構 -- 二叉樹的基本操作】

二叉樹的基本操作 1.獲取樹中節點的個數1.1 計數器遞歸的思路1.2 子問題思路: 2. 獲取葉子個數3. 獲取第k層節點的個數4.獲取二叉樹的高度5.檢測值為value的元素是否存在 1.獲取樹中節點的個數 思路:整棵樹的節點個數 左子樹的節點個數+右子…

休息日的思考與額外題——雙指針、原地哈希day28

文章目錄 前言一、11. 盛最多水的容器二、41. 缺失的第一個正數三、42. 接雨水總結 前言 一個本碩雙非的小菜雞,備戰24年秋招,計劃二刷完卡子哥的刷題計劃,加油! 二刷決定精刷了,于是參加了卡子哥的刷題班&#xff0c…

32單片機基礎:旋轉編碼器計次

接線圖如上圖所示。 我們初始化一下PB0和PB1兩個GPIO口外設中斷,當然,這里只初始化一個外部中斷也能完成功能的對于編碼器而言,下圖所示為正轉的波形。如果把一相的下降沿用作觸發中斷,在中斷時刻讀取另一相的電平,正…

【EXCEL】SUMIFS多次條件篩選數據

問題案例 有如下兩個工作表(Sheet1和Sheet2): 在sheet1中的C2行獲得一個結果(項目1的1月收入),是對sheet2中的A列篩選出“項目1”B列篩選出“202401”而獲得對應C列的結果。借助excel的公式如何實現。 S…

【算法科目】2024年第二屆全國大學生信息技術認證挑戰賽 題解

圖像壓縮 曾經看到過,這是一道洛谷原題,很可惜我沒做過,有點看不懂就沒嘗試。 原題鏈接:B3851 [GESP202306 四級] 圖像壓縮 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 因數分解 直接枚舉就行了,從2開始找因子&a…

Spring:EnclosingClass工具類分辨

Spring:EnclosingClass工具類分辨 1 前言 通過Spring的工具分辨EnclosingClass類。 測試類如下: package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …

微信小程序(四十六)登入界面-進階版

注釋很詳細,直接上代碼 上一篇 此文使用了vant組件庫,沒有安裝配置的可以參考此篇vant組件的安裝與配置 新增內容: 1.手機號與驗證碼格式驗證 2.驗證碼的網絡申請和校驗 wechat-http模塊在好幾篇以前已經講了咋安裝的,不記得的友…

為什么要用Python?

為什么要用Python? Python簡單易用:提供大量的簡單易用數據結構和內置庫,語法結構也很簡單易讀,不需要使用括號來進行代碼塊分組,也不需要預聲明變量或參數。Python開發效率高:簡單易用的前提下&#xff0…

vue3輸入單號和張數,自動生成連號的單號

需求&#xff1a; 輸入連號事件&#xff0c;需要在表格中輸入物流單號&#xff0c;物流號碼&#xff0c;生成的數量&#xff0c;名稱&#xff0c;點擊確定自動生成固定數量的連號物流單號 1.頁面布局 <div><el-button type"primary" size"default&quo…

最新版阿里云Linux CentOS7 ecs-user用戶安裝Mysql8詳細教程(超簡單)

經過兩天的踩坑后&#xff0c;終于成功安裝&#xff0c;并找到了最快捷的安裝方式。接下來就由我來給大家介紹不踩坑安裝大法&#xff01; 一、下載Mysql 首先前往Mysql官網下載 MySQL官方下載地址 第一步&#xff0c;選擇安裝包&#xff0c;這是最關鍵的一步&#xff0c;選錯安…

使用query請求數據出現500的報錯

我在寫項目的時候遇到了一個問題&#xff0c;就是在存商品id的時候我將它使用了JSON.stringify的格式轉換了&#xff01;&#xff01;&#xff01;于是便爆出了500這個錯誤&#xff01;&#xff01;&#xff01; 我將JSON.stringify的格式去除之后&#xff0c;它就正常顯示了&…

昇騰ACL應用開發之硬件編解碼dvpp

1.前言 在我們進行實際的應用開發時&#xff0c;都會隨著對一款產品或者AI芯片的了解加深&#xff0c;大家都會想到有什么可以加速預處理啊或者后處理的手段&#xff1f;常見的不同廠家對于應用開發的時候&#xff0c;都會提供一個硬件解碼和硬件編碼的能力&#xff0c;這也是拋…

Docker 命令詳解:容器、鏡像、網絡和數據卷管理

文章目錄 1. docker run2. docker pull3. docker images4. docker ps5. docker stop6. docker rm7. docker commit8. docker exec9. docker logs10. docker network11. docker volume12. docker save13. docker load14. docker tag15. docker search16. docker diff17. docker …

sql注入之sqli-labs/less-3 單引號加括號閉合

輸入單引號試探&#xff1a; id1 報錯信息里面出現 ) 說明閉合符合里面還有個 ) 再次試探&#xff1a;id1 ) order by 3 -- 查看回顯位置&#xff1a; id-1%20%27)%20union%20select%201,2,3%20-- 查看數據庫&#xff1a; id-1%20%27)%20union%20select%201,2,database()%2…

Kerberos協議攻防之黃金票據控制整個公司電腦

&#x1f449;重點內容&#xff1a; 1、網絡認證、本地認證、域認證的優略勢 2、域認證之Kerberos協議的認證流程詳解 3、TGT、Krbtgt、KDC、TGS搞懂這些繞口的概念 4、深入理解黃金票據攻擊Golden Ticket Attack 5、實戰&#xff01;通過黃金票據控制內網中所有的電腦

DC-2靶機詳解

寫寫自己打DC-2的過程 使用工具 kali DC-2的靶機下載地址為&#xff1a;https://www.vulnhub.com/entry/dc-2,311/ 環境配置。 Kali和DC-2都設置為NAT模式&#xff0c;都為僅主機模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 獲取靶機ip&#xff1a;192.16…

基于springboot+vue的工廠車間管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…