【Python】洛谷1008
题目描述
将1,2,⋯ ,9共9个数分成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))

浙公网安备 33010602011771号