洛谷题目P10008 三连击

题目:

题目描述

将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

    里面的一些题目还是很有意思的,一边学一边实践吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值