问题
福尔摩斯对他的头号敌人莫里亚蒂感到非常焦虑。他为制服莫里亚蒂所做的努力都没有奏效。近日,福尔摩斯正在与沃森医生一起研究一个问题。沃森提到CIA最近在他们的超级计算机"The Beast"上遇到了奇怪的问题。
今天下午,福尔摩斯收到莫里亚蒂的便条,称他已经在"The Beast"中注入了病毒。此外,这张纸条上还印着数字N。经过一番计算,福尔摩斯发现去除病毒的关键是拥有N位数的最大"Decent"数。
一个"Decent"数必须满足:
- 其数字为3或5或二者兼有。
- 不允许使用其他数字。
- 数字3出现的次数可被5整除。
- 数字5出现的次数可被3整除。
与此同时,“The Beast”的毁灭倒计时正在快速运行。你能在福尔摩斯之前拯救“The Beast”并找到密码吗?
输入格式 第一行包含整数T,表示测试用例的数量。接下来是T行,每行包含一个整数N,即数字位数。
输出格式 拥有N位数的最大Decent数。如果不存在这样的数字,请告诉福尔摩斯他错了,并打印“-1”
约束条件 1<=T<=20 1<=N<=100000
示例输入
4
1
3
5
11
样例输出
-1
555
33333
55555533333
解释: 当N=1时,不存在这样的数字。
当N=3时,只有555是可能的数字。
当N=5时,只有33333是可能的数字。
当N=11时,55555533333和所有数字排列组合都是有效的数字,其中给定的数字是最大的一个。
答案
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)
问题
有人能解释一下背后的原因吗?具体来说,'c'变量的赋值是在做什么?
来源:https://www.hackerrank.com/challenges/sherlock-and-the-beast
2*n%3
将为0
,如果n-1
是3的倍数,则为2
,如果n+1
是3的倍数,则为1
。 因此,在这三种情况下,c
将分别为0
,10
或5
。(如果还不清楚,请打印出[5 *(2 * n%3)for n in range(20)]
。)请注意,c
有什么用处 - 您有n-c
个5和c
个3。 这足以弄清楚吗? - abarnert