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

该博客探讨了洛谷第1008题,目标是将1到99的数字分成三组,形成比例为1:2:3的三位数。博主提供了两种Python解答思路:一是将数字合并成字符串并检查是否去重后仍为9个不包含0的字符;二是计算数字和积与1到9的和积进行比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

将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

  1. 把i,j,k分别作为长度为3的字符串,然后合并为长度为9的字符串。
  2. 对这个字符串去重,如果长度依然为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

  1. 取出i,j,k的9个数字。(百位数通过//100、十位数通过//10%10、个位数通过%10计算得到)
  2. 如果这9个数字的和等于1~9的和,并且这9个数字的积等于1~9的积,那么说明i,j,k满足条件。
<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值