题目描述
将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。
Python解答
i 为最小的三位数,从123到333遍历。j 为 i 的2倍数,k 为 i 的3倍数。
解答1
把i,j,k分别作为长度为3的字符串,然后合并为长度为9的字符串。对这个字符串去重,如果长度依然为9,而且其中不包括0,那么说明i,j,k满足条件。
# -*- coding: utf-8 -*-
# @Time : 2019/10/31 17:27
# @Author : 小晓酱
# @File : luoguu.py
# @Software: PyCharm
for i in range(123, 334):
j = str(2 * i)
k = str(3 * i)
i = str(i)
a = {i[0], i[1], i[2], j[0], j[1], j[2], k[0], k[1], k[2]}
if len(a) == 9 and ("0" not in a):
print(int(i), int(j), int(k))
解答2
取出i,j,k的9个数字。(百位数通过//100、十位数通过//10%10、个位数通过%10计算得到)如果这9个数字的和等于1~9的和,并且这9个数字的积等于1~9的积,那么说明i,j,k满足条件。
# -*- coding: utf-8 -*-
# @Time : 2019/10/31 17:27
# @Author : 小晓酱
# @File : luoguu.py
# @Software: PyCharm
for i in range(123, 334):
j = 2 * i
k = 3 * i
i0 = i // 100
i1 = i // 10 % 10
i2 = i % 10
j0 = j // 100
j1 = j // 10 % 10
j2 = j % 10
k0 = k // 100
k1 = k // 10 % 10
k2 = k % 10
s = sum(range(1, 10))
p = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9
if (i0 + i1 + i2 + j0 + j1 + j2 + k0 + k1 + k2) == s and (i0 * i1 * i2 * j0 * j1 * j2 * k0 * k1 * k2) == p:
print(i, j, k)