洛谷P1618(三连击)Python解法

三连击(升级版)
题目描述
将 1 , 2 , … , 9 共 9  个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A : B : C A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。

//感谢黄小U饮品完善题意

输入格式
三个数,A , B , C 

输出格式
若干行,每行 3  个数字。按照每行第一个数字升序排列。

样例 #1
样例输入 #1
1 2 3
样例输出 #1
192 384 576
219 438 657
273 546 819
327 654 981

提示
保证 A < B < C 。

u新增加二组 Hack 数据。

思路分析

1、首先9个数字全部都要用到,且不重复

2、范围在100到999之间

方法

对于如何判断是否数字已经被使用过,我们可以用两个函数来实现需求。

首先定义一个列表str[],里面有十位,str[0,0,0,0,0,0,0,0,0,0]初始值都为0

然后定义一个落位函数(瞎定义的) 对于输入函数中的三位数,可以通过这个落位函数,给str[]里面的值进行赋值。例如123,通过函数,str[1]=str[2]=str[3]=1。然后将第二个,第三个数字分别进行down操作。

此时str[]里面已经赋值完毕,三个三位数所涉及到的数字,str[]里面对应的都为1了。这时进行Judge()判断函数的操作,判断是否str[1]到str[9]是否都为1,即判断是否都已经涉及到了,如果都涉及到了,那么输出为Ture即符合。同时因为最多九个数字,确保都涉及到的情况下,就不可能重复了。

注意特殊比例 比如0 1 2这种。要单独进行判断

def Judege(str):
    for i in range(1,10):
        if str[i]!=1:
            return False
    return True
def down(n,str):
    while n:
        str[0]=1
        str[n%10]=1
        n=n//10
a,b,c=map(int,input().split())
str=[0,0,0,0,0,0,0,0,0,0]
num2=0
num3=0
count=0
if a!=0:
    for i in range(100,1000):
        str = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        num2=int(i*b//a)
        num3=int(i*c//a)
        down(i,str)
        down(num2,str)
        down(num3,str)
        if Judege(str)and num2<1000 and num3<1000:
           print(i,num2,num3)
           count=count+1
    if count == 0:
        print("No!!!")
else:
    print("No!!!")

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值