【Python】洛谷1008

题目描述

1,2,⋯ ,99个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

我的解题思路

直接对于1-9这9个数字,随机组合成三位数,然后验证每次的结果是否符合题目的要求。代码如下:(由于超时没有结果)

ps:我思路也太暴力了qwq 

 

import random
a = []
while 0<1:
    m = random.sample(range(1,10),9)
    n1 = m[0]*100+m[1]*10+m[2]
    n2 = m[3]*100+m[4]*10+m[5]
    n3 = m[6]*100+m[7]*10+m[8]
    if n2==2*n1 and n3==3*n1:
        A = [n1,n2,n3]
        a.append(A)
print(' '.join(a))

正确的思路:

1.认识到得一个数就可以全部出来了,所以只要求出符合条件的A1就好了呀

2.这道题虽然是暴力枚举+结果筛选,还是需要考虑一下使接受筛选的数据少一些。

(1)首先划定遍历数据的范围(对于A1):

最小的数是123,如果A1=123,则A3 = 3*A1 = 369。

最大的数是987,如果A3=987,则A1=A3/3 = 329。

所以A1∈(123,329)

(2)A1的条件:

比例+不重复

for A1 in range(123,329):#遍历A1的可能的数
    A2 = str(A1*2)#制造A2     #转换为字符串,因为集合去重的时候元素是字符串才有效!(除了数字以外)
    A3 = str(A1*3)#制造A3
    A1 = str(A1)
    #去重
    #方法:集合去重
    a = {A1[0],A1[1],A1[2],A2[0],A2[1],A2[2],A3[0],A3[1],A3[2]}#符合条件的是:1.去重之后有9个数2.“0”不在内。
    if len(a) == 9 and ("0" not in a):
        print(int(A1),int(A2),int(A3))
 
posted @ 2020-08-14 17:31  ypreason  阅读(250)  评论(0)    收藏  举报