需要注意的是,题目要求按顺序输出,而以这种思路输出的话并不是有序的,因为有五位数和六位数。所以我们要先将回文数存储到数组中,然后排个序,最后再输出。
su = int(input())
result = []
for i in range(100,1000):
g = i % 10
s = i // 10 % 10
b = i // 100
suit1 = 2 * (s+b) + g # 5位数,除中间那个数外其他数出现过两遍
suit2 = 2 * (g+s+b) # 6位数,每个数都出现过两遍
if suit1 == su:
i = str(i)
num = int(i+i[:-1][::-1]) # i[:-1][::-1]表示得到除最后一个数外的倒序排列
result.append(num)
当su = 2 时,两种可能均可出现,所以这里不能用elif
if suit2 == su:
i = str(i)
num = int(i+i[::-1])
result.append(num)
result.sort()
for i in result:
print(i)
依据题意, 我们获取三位数中的每一位数上的数字,然后对他们求和比较看是否相等,如果相等则输出。
for i in range(100,1000):
g = i % 10
s = i // 10 % 10
b = i //100
if i == g ** 3 + s ** 3 + b ** 3:
print(i)
看到杨辉三角形我们很容易想到一个数等于它肩膀两数之和,通过这一性质可以得出每一行三角形元素的值。但是,这一次我没有用这个方法。
我们知道杨辉三角左右两边对称,因此我们只要求出左半部分就能得到一整行的元素了,杨辉三角还跟组合数有关,其里面的每一个元素都能用组合数表示。第N行的第M列可以表示成C(N-1,M-1),如6在第5行的第3列,它对应的组合数就是C(5-1,3-1),即C(4,2)。
因此,我们需要定义一个求组合数的函数。C(5,2) 可以表示成 (5 x 4) / (2 x 1) 也可以表示成(5/2)x (4/1)。那么我们的组合数可以这么写:
def C(a,b):
if b == 0:
return 1
if b > a: # 组合数性质(C(a,b) = C(a,a-b))
b = a - b
result = 1
for i in range(b): #
result *= a / b # 注意注意要用格式化函数,避免数据丢失
a -= 1
b -= 1
return int(round(result,0))
需要特别注意的是: 涉及到除法运算时,有可能会出现小数的情况,像上面那种是特别容易出现的,那么这时候就要考虑会不会出现数据丢失了,当然,以后你都不用考虑,直接加上格式化函数,然后再转换成整型。先说说round函数的作用:保留若干位小数,round函数的第二个参数是多少就是保留多少位小数。与format函数不同的是,无论你写了保留多少位小数都会舍弃掉小数点后面的0。因为在除法中,有些数是除不尽的,这样就会造成数据丢失。举个例子,5 / 3 x 3, 5除以3后再乘3会等于5吗?,显然不等,因为电脑没有分数表示,5除以3后会得到一个数不尽的小数,既然是数不尽,而计算机又不能完全表示5/3这个数,当然会造成数据丢失了,因此 5 / 3 x 3 会很接近5 但不等于5。这时候round函数的作用来了,通过四舍五入就能够变成5.0,最后将其转换成整数,就是我们需要的结果了。其实round函数不是四舍五入,而是四舍六入,具体可以了解我的这篇文章。
既然知道了杨辉三角的两个性质,对称性与组合数,以及组合数的求解方法,那么我们就能来求杨辉三角了。
if b == 0:
return 1
if b > a:
b = a - b
result = 1
for i in range(b):
result *= a / b
a -= 1
b -= 1
return int(round(result,0))
step = 1 # 表示初始所在行数
line = int(input()) # 表示所要达到的目标行数
print(1)
while step < line:
nums = []
for i in range(step//2+1): # 根据杨辉三角的对称性,我们只要求一半的数就好了
nums.append(C(step,i))
if step % 2 == 0: # 偶数行时,中间数就只能出现一次
nums += nums[::-1][1:]
else:
nums += nums[::-1] # 奇数行时,中间数能够出现两次
for i in nums:
print(i,end=" ")
print()
step += 1
在这题中可以使用python的find函数求解,如果找到了元素就返回其下标,否则返回-1。使用find函数的话判断如果找到了,那么下标+1即可,否则就是没找到直接返回-1.
也能够直接使用while遍历, 如果找到了标记为已找到,然后返回下标+1,否则返回-1.
我这里提供第二种解法。
length = int(input())
nums = list(map(int,input().split()))
target = int(input())
i = 0
find = False
while i < length :
if nums[i] == target:
i += 1
find = True
print(i)
break
i += 1
if not find :
print(-1)
这题使用python的三个函数 max,min,sum一步到位。
length = int(input())
nums = list(map(int,input().split()))
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Python 学习路线规划
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-UbmxED2z-1712573181725)]