【发布时间】:2017-07-15 09:26:38
【问题描述】:
问题
夏洛克·福尔摩斯对他的大敌莫里亚蒂教授越来越偏执。他为制服莫里亚蒂所做的一切努力都是徒劳的。这些天,Sherlock 正在与 Watson 博士一起解决一个问题。 Watson 提到,最近 CIA 的超级计算机“The Beast”遇到了奇怪的问题。
今天下午,夏洛克收到了莫里亚蒂的来信,说他感染了“野兽”病毒。而且,那张纸条上还印着数字N。经过一番计算,Sherlock 发现清除病毒的关键是最大的 N 位“体面”数字。
一个“体面”的数字有 -
- 3 或 5 或两者都作为其数字。
- 不允许使用其他数字。
- 3 出现的次数可以被 5 整除。
- 5 出现的次数可以被 3 整除。
与此同时,“野兽”的毁灭反击速度非常快。你能拯救“野兽”,并在夏洛克之前找到钥匙吗?
输入格式 第一行将包含一个整数 T,即测试用例的数量。接下来是T行,每行包含一个整数N,即数字中的位数
输出格式 具有 N 位数的最大体面数。如果不存在这样的数字,告诉 Sherlock 他错了并打印 '-1'
约束 1
示例输入
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可以被 3 整除,2如果它是n-1可以被 3 整除,1如果@987654331 @ 可以被 3 整除。因此,在这三种情况下,c将是0、10或5。 (如果还不清楚,请打印出[5*(2*n%3) for n in range(20)]。)注意c有什么用处——你有n-c5 和c3。这足以弄清楚吗?
标签: python algorithm python-3.x