Amo*_*ous 9 python algorithm python-3.x
夏洛克·福尔摩斯对他的大敌莫里亚蒂教授感到十分偏执.他所有压制Moriarty的努力都是徒劳的.这些天Sherlock正在研究Watson博士的一个问题.沃森提到中情局最近一直面临着超级计算机"野兽"的奇怪问题.
今天下午,Sherlock收到了Moriarty的一张纸条,说他用病毒感染了"野兽".此外,纸币上印有数字N. 经过一些计算,Sherlock发现消除病毒的关键是拥有N位数字的最大"体面"数字.
"体面"号码有 -
与此同时,对"野兽"的破坏反击速度非常快.你可以保存'The Beast',并在Sherlock之前找到钥匙吗?
输入格式第1行将包含整数T,即测试用例的数量.接下来是T行,每行包含一个整数N,即数字中的位数
输出格式最大有N位的体面数.如果不存在这样的号码,请告诉Sherlock他错了并打印'-1'
约束1 <= T <= 20 1 <= N <= 100000
4
1
3
5
11
Run Code Online (Sandbox Code Playgroud)
-1
555
33333
55555533333
Run Code Online (Sandbox Code Playgroud)
说明对于N = 1,没有这样的数字.
对于N = 3,555只是可能的数字.
对于N = 5,333333仅是可能的数字.
对于N = 11,55553333333并且所有数字排列都是有效数字,其中,给定数字是最大数字.
for _ in range(int(input())):
n = int(input())
c = 5*(2*n%3)
if c > n:
print(-1)
else:
print('5' * (n-c) + '3'*c)
Run Code Online (Sandbox Code Playgroud)
有人可以解释它背后的推理吗?具体来说'c'变量的赋值是什么?
资料来源:https://www.hackerrank.com/challenges/sherlock-and-the-beast
Ben*_*Ben 16
数学解决方案:
设a ='5'的len,b ='3'的len.所以
a + b = N
我们知道3除以a,而5除以b,所以让a = 3n,b = 5m
3n+5m = N
这是一个丢番图方程(http://en.wikipedia.org/wiki/Diophantine_equation),其中一个解是(n0,m0)=(2N,-N),并且是一般解
(n,m) = (5k+2N, 3K-N), k any integer
现在的问题是最小化3k-N的数量(因为你想要更多'5'),所以3k-N> 0.这与找到k是3k是3 FROM N的下一个倍数相同.
例如,如果N = 10或11,我们正在寻找3k = 12或k = 4.
因此,3k-N是N与3的下一个倍数之间的距离.解决方案的作者声称3k-N = 2N%3,并且您通过耗尽来证明这一点,评估N%3 = 0,1的情况,2.对于记录,表达式'2N%3'中的'2'不是唯一的,它适用于任何数量的序列2,5,8,1 ......,以及作者选择的原因这个特殊的表达方式,我不能说.
您还可以考虑N%3在这个意义上是如何接近N的下一个LOWER倍数为3.