循环!循环!循环!——洛谷#P1008 三连击(Python实现)

mac2024-10-12  51

题目描述

将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)

 

最新回复(0)