Algorithm 无法理解算法的答案
我今天在做这个问题 基本上,问题要求最大的“体面”数字有N位,其中“体面”数字是:Algorithm 无法理解算法的答案,algorithm,Algorithm,我今天在做这个问题 基本上,问题要求最大的“体面”数字有N位,其中“体面”数字是: 只有3和5作为其数字 3出现的次数可以被5整除 5出现的次数可以被3整除 输入格式 第1行将包含一个整数T,即测试用例的数量, 后跟T行,每行包含一个整数N,即数字 数字中的位数 输出格式 有N个数字的最大正数。如果没有这样的号码,告诉我 夏洛克说他错了,打印“-1” 样本输入 4 1 3 5 11 样本输出 -1 555 33333 55555533333 解释 对于N=1,没有这样的数字。对于N=3,只有
4
1
3
5
11
样本输出
-1
555
33333
55555533333
解释
对于N=1,没有这样的数字。对于N=3,只有555是可能的
号码。对于N=5,33333是唯一可能的数字。对于N=11555533333
所有的数字排列都是有效数字,其中
给定的数字是最大的
我用普通方法解决了这个问题,但我看到了这个答案:
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)”这一行,谢谢我们正在寻找n=5*x+3*y的整数解,其中5*x是3的数量,3*y是5的数量。x和y都必须大于等于0,并且x应该尽可能小,因为如果我们有更多的5s,我们可以生成更大的数 将其转换为y=(n-5*x)/3。为了使y是一个整数,n-5*x必须是3的倍数,所以我们可以计算模3(从现在开始,I write==for是全等模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<0,则没有解决方案。您的链接已断开,如果没有它,则不清楚问题是什么。请发布完整的问题,以及这个程序应该做什么。为什么要征求意见?输入的有效范围是什么?请参阅:链接没有帮助。我不是在寻找这个问题的答案。我无法理解这个使用“c3=5*(2*n%3)”行的特殊解决方案,这似乎是一条数学规则。回答得很好。谢谢!