扶贫网站建设方案,电脑如何重新安装wordpress,中企动力北京总部地址,苏州新区做网站1 有趣的回文数
**题目需求#xff1a;**对于任何自然数#xff0c;将它自身和它的倒序数#xff08;反转过来#xff09;相加#xff0c;再将得到的和与它的倒序数相加#xff0c;一直重复#xff0c;最终总会得到一个回文数。 提示#xff1b;回文数#xff0c;如 …1 有趣的回文数
**题目需求**对于任何自然数将它自身和它的倒序数反转过来相加再将得到的和与它的倒序数相加一直重复最终总会得到一个回文数。 提示回文数如 12321 就是回文数从左向右或从右向左是同一个数字。 样例描述 比如12213312 这个数只需要一步就能得到回文数。 再比如 265 这个数 265562827 8277281555 155555517106 7106601713123 131233213145254 最终数字也是回文数字。
请编写代码验证任意自然数字经过上述操作后也会得到一个回文数。
解题流程
此题有 2 个核心逻辑
如何获取一个数字的反转数。最简单的方案就是使用字符串的切片功能。如何判断一个数字是不是回文数把自己和反转后的数字比较如果相等说明是回文数否则不是。
解决方案一
# 接收用户输入数字把数字当成字符串类型以便使用节片功能
num input(请输入一个数字)
old_num num
while True:# 使用切片反转num_rev num[::-1]# 原数字和反转数字相加,需要转换成数字num_sum int(num) int(num_rev)# 判断是不是回文数因为要使用切片再次转换成字符串if str(num_sum) str(num_sum)[::-1]:print(old_num, 最终得的回文数是, num_sum)breakelse:#继续num str(num_sum)思维扩展
反转数字的逻辑
# 功能反转用户输入的数据
numint(input(请输入一个数字))
#保存反转后的数字
reverse_num0
while num0:tempnum % 10reverse_numreverse_num*10tempnumnum // 10
print(reverse_num)回文数的逻辑
# 功能反转用户输入的数据
numinput(请输入一个数字)
left 0
rightlen(num)-1
is_hwTruewhile leftright:if int(num[left])int(num[right]):left1right-1else:is_hwFalsebreak
if is_hw:print(num,是一个回文数)
else:print(num,不是一个回文数)
2. 圣经数 153
**题目需求**任找一个 3 的倍数把各位数字的立方相加得出和再把和的各位数字立方后相加如此反复进行最后必然出现“圣经数”153
如24 是 3 的倍数按照上述规则进行变换的过程是 24→2³4³→72→7³2³→351→3³5³1³→153
请编写程序证明用户输入的任一个数字经过上述的操作后最后会得到圣经数153 。
解题流程
本题目的核心逻辑如何分解数字的每一位并求数字的立方和。
num input(请输入一个 3 的倍数)
old_num num
if int(num) % 3 0:# 数字必须能被 3 整除分解并求分解后数字的立方while True:# 保存相加结果s 0for i in num:# 注意转换成 ints int(i) ** 3if s 153:print(old_num, 最终可以演变成圣经数 153)breakelse:# 继续num str(s)3. 以文件方式保存个人信息
把自己的家人的信息以文件的方式保存。把自己的成绩信息保存在文件中
本题主要是考核学生对文件读写知识的掌握程度。
with open(d/self.txt,w) as f:f.write(姓名张三)f.write(\n)f.write(年龄20)4. 求解因子
输入一个数字并求解出此数字的所有因子如 6的因子是 1236 因子指能被数字整除的数字 。
num int(input(请输入一个数字))
for i in range(1, num 1):if num % i 0:print(i)5. 求平均分
一个班上有 5名学生请编写程序输入 5 名学生的成绩并求解这 5 名学生的总分、平均分。
# 保存总分
s 0
for i in range(5):score int(input(请输入学生成绩:))s score
print(总分:, s)
print(平均分:, s / 5)6. 求解分数相加
求解 1/22/33/44/55/66/7……99/100 的值
此题本质还是累加运算。观察后会发现分子的变化是从 1 ~ 99分母变化是从 2 ~ 100 。
s 0
fz 1
fm 2
while fz 99:s fz / fmfz 1fm 1
print(结果, s)题目演变
1/2-2/33/4-4/55/6-6/7……99/100
s1/2
fz2
fm3
fh1
for i in range(99):s(fz/fm)*fhfz2fm2# 1 -1 fh-fhprint(fh)
print(s)7. 随机数求和
题目需求使用随机模块随机生成 20 个1~100之间的数字并求解这20个数字相加的结果。
本题还是累加运算只是累加数字来源来随机数。
import random
s 0
for i in range(20):s random.randint(1, 100)
print(s)第二种解决方案
和第一种方案比较随机数的生成方式不同。
import random
s 0
for i in range(20):s int(random.random()*1000) % 100 1
print(s)