三连击(升级版)
题目描述
将 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!!!")