题目:
题目描述
将1,2⋯,9共9个数分成3组,分别组成3个三位数,且使这33个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。
比如说:192 384 576
解题思路:
分别是1比2比3,那就不需要遍历到999了, 只需要遍历第一个数到333,最后那个乘以3, 减少复杂度。
三个数,刚好1到9每个数出现一次,那么只需要把三个三位数的每个数字放进数组, 升序排列,如果他的数组是1到9,那么就是符合条件的了。
解题代码:
star_list=[1,2,3,4,5,6,7,8,9]
def test_01(xx1):
if len(xx1)==len(star_list):
k=0
for i in range(0,len(xx1)):
if xx1[i]==star_list[i]:
k=k+1
return k
for a in range(100,333):
x1=a//100
x2=(a-x1*100)//10
x3=(a-x1*100-x2*10)
x4=(a*2)//100
x5=((a*2)-x4*100)//10
x6=((a*2)-x4*100-x5*10)
x7=(a*3)//100
x8=((a*3)-x7*100)//10
x9=((a*3)-x7*100-x8*10)
first_list = [x1,x2,x3,x4,x5,x6,x7,x8,x9]
first_list.sort()
if test_01(first_list)==9:
print(a,a*2,a*3)
解题总结:
感觉自己可以写一个数组对比函数,刚开始学pt嘛,轮子造起来。以后的车子肯定越跑越快奥。一会儿百度下pt是否有数组对比吧。我记得好像lua中是可以直接用==对比数组的。
本题优化:
优化思路肯定是优化遍历,其实不需要遍历100到333,只需要遍历里面不含有重复元素的数就好了。
但是也意味着需要再加一个判断,如果只是加挨个遍历的判断,那么也没多少意义。一会儿思考一下吧,创建一个
100到300的无重复数值的生成函数试试。
题外话:
如果各位大佬有其他更简单的想法,欢迎讨论。本次解题的平台为:www.luogu.com.cn
里面的一些题目还是很有意思的,一边学一边实践吧。