Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌Foobar挑战2级“;嘿,我已经做到了;_Java_Algorithm_Base - Fatal编程技术网

Java 谷歌Foobar挑战2级“;嘿,我已经做到了;

Java 谷歌Foobar挑战2级“;嘿,我已经做到了;,java,algorithm,base,Java,Algorithm,Base,我需要帮助解决谷歌Foobar挑战的第二个层次 指挥官Lambda使用一种自动算法将随从随机分配到任务中,以便让她的随从保持警觉。但是你已经注意到了算法中的一个缺陷——它最终会自行循环,因此它不会在迭代时分配新的仆从,而是陷入一个值循环中,从而使相同的仆从一次又一次地完成相同的任务。你认为向Lambda指挥官证明这一点将有助于你为下一次晋升打下基础 您已经计算出该算法具有以下过程: 1) 从一个随机仆从ID n开始,它是基b中长度为k的非负整数 2) 将x和y定义为长度为k的整数。x按降序排列

我需要帮助解决谷歌Foobar挑战的第二个层次


指挥官Lambda使用一种自动算法将随从随机分配到任务中,以便让她的随从保持警觉。但是你已经注意到了算法中的一个缺陷——它最终会自行循环,因此它不会在迭代时分配新的仆从,而是陷入一个值循环中,从而使相同的仆从一次又一次地完成相同的任务。你认为向Lambda指挥官证明这一点将有助于你为下一次晋升打下基础

您已经计算出该算法具有以下过程:

1) 从一个随机仆从ID n开始,它是基b中长度为k的非负整数
2) 将x和y定义为长度为k的整数。x按降序排列n位,y按升序排列n位
3) 定义z=x-y。如有必要,将前导零添加到z以保持长度k
4) 分配n=z以获取下一个仆从ID,然后返回步骤2

例如,给定仆从ID n=1211,k=4,b=10,然后x=2111,y=1112和z=2111-1112=0999。然后下一个仆从ID将是n=0999,算法将再次迭代:x=9990、y=0999和z=9990-0999=8991,依此类推

根据n、k(由n导出)和b的值,算法在某个点达到一个循环,例如通过达到一个常量值。例如,从n=210022、k=6、b=3开始,算法将到达值的循环[210111、122221、102212],并且无论它继续迭代多少次,它都将停留在这个循环中。从n=1211开始,例程将到达整数6174,因为7641-1467是6174,所以无论迭代多少次,它都将保持该值

给定一个仆从ID作为字符串n,表示基b中长度为k的非负整数,其中2=0;我——){ newString.append(arr[i]); } if(newString.toString()包含(“-”){ newString.deleteCharAt(newString.length()-1); } 返回newString.toString(); } 公共静态字符串addLeadingZero(整数k,字符串z){ 如果(k>z.length()){ 字符串零=”; 对于(int i=0;i<(k-z.length());i++){ 零+=“0”; } 零+=z; 返回零; } 返回z; }
它只适用于十个测试用例中的三个

输入的约束是什么n,它可以有多少位数?它没有告诉我纵向的输入限制,失败的测试用例报告了哪些类型的错误?NumberFormatExceptionError用于“base”不是10的情况。输入的限制是什么,它可以有多少位数?它没有告诉我对于失败测试用例报告的错误类型的纵向输入限制?对于“基数”不是10的情况,NumberFormatExceptionError。
def answer(n, b):

    k = len(n)
    m = n
    mini_id = []
    while m not in mini_id:
        mini_id.append(m)
        s = sorted(m)
        x_descend = ''.join(s[::-1])
        y_ascend = ''.join(s)        
        if b == 10:
            int_m = int(x_descend) - int(y_ascend)
            m = str(int_m)
        else:
            int_m_10 = int(to_base_10(x_descend, b)) - int(to_base_10(y_ascend, b))
            m = to_base_n(str(int_m_10), b)

        m =  (k - len(m)) * '0' + m
    return len(mini_id) - mini_id.index(m)
def answer(n, b):

    k = len(n)
    m = n
    mini_id = []
    while m not in mini_id:
        mini_id.append(m)
        s = sorted(m)
        x_descend = ''.join(s[::-1])
        y_ascend = ''.join(s)        
        if b == 10:
            int_m = int(x_descend) - int(y_ascend)
            m = str(int_m)
        else:
            int_m_10 = int(to_base_10(x_descend, b)) - int(to_base_10(y_ascend, b))
            m = to_base_n(str(int_m_10), b)

        m =  (k - len(m)) * '0' + m
    return len(mini_id) - mini_id.index(m)