Algorithm 无法理解算法的答案

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,只有

我今天在做这个问题

基本上,问题要求最大的“体面”数字有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,只有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)”行的特殊解决方案,这似乎是一条数学规则。回答得很好。谢谢!