我今天在做这个问题。
基本上,问题要求最大的体面'有N个数字的数字,其中' Decent'号码是:
输入格式
第一行将包含一个整数T,即测试用例的数量, 接着是T行,每行包含整数N,即数字 数字中的数字
输出格式
最大的有N个数字的体面数字。如果不存在这样的号码,请告诉 Sherlock说他错了并打印' -1'
示例输入
4
1
3
5
11
示例输出
-1
555
33333
55555533333
解释
对于N = 1,没有这样的数字。对于N = 3,只能使用555 数。对于N = 5,333333仅是可能的数字。对于N = 11,55553333333 并且所有数字排列都是有效数字,其中包括 给定的数字是最大的。
我用常规方法解决了这个问题,但看到了这个答案:
t = int(raw_input())
for _ in range(t):
n = int(raw_input())
c3 = 5*(2*n%3)
if c3 > n:
print -1
else:
print '5' * (n-c3) + '3'*c3
有人能解释一下这个方法吗?特别是行' c3 = 5 *(2 * n%3)',谢谢
答案 0 :(得分:3)
我们正在寻找n = 5 * x + 3 * y的整数解,其中5 * x是3的数,3 * y是5的数。 x和y都必须> = 0且x应该尽可能小,因为如果我们有更多的5,我们可以建立更大的数字。
转换它给出y =(n-5 * x)/ 3。为了使y成为整数n-5 * x必须是3的倍数,所以我们可以计算模3(从现在开始,我写= = for for congruent modulo 3)。
n-5 * x == 0
n == 5 * x == 2 * x(因为5 == 2)
将两边乘以2给出
2 * n == 4 * x == x(因为4 == 1)
由于我们想要x小,我们取x = 2 * n%3和y =(n-5 * x)/ 3
如果y <&lt; 0