在每个迭代python中查找唯一的数字

时间:2017-03-10 16:15:43

标签: python python-2.7

这就是问题所在:https://code.google.com/codejam/contest/6254486/dashboard

输出应为:

输入

5
0
1
2
11
1692

输出

Case #1: INSOMNIA
Case #2: 10
Case #3: 90
Case #4: 110
Case #5: 5076

我的输出:

Case #1: INSOMNIA
Case #2: 39916800
Case #3: 79833600
Case #4: 3991680
Case #5: 8527680

我无法理解我做错了什么。

T = int(raw_input())

final = []
for i in range(T):
    c = 2    
    n = int(raw_input())

    a = []    
    while True:    
        if n == 0:
            final.append(0)
            break

        b = set(str(n))    
        for d in b:
            if int(d) not in a:
                a.append(int(d))

        if len(a) == 10:
            final.append(n)
            break

        n = n*c
        c += 1   

for i in range(T):
    if final[i] == 0:
        print "Case #%d: INSOMNIA" %(i+1)
    else:
        print "Case #%d: %d" %(i+1,final[i])

2 个答案:

答案 0 :(得分:0)

您没有正确生成系列。密钥位于第39行(n = n*c)。

你的系列应为n, 2n, 3n, 4n, ... 您的方法会生成n, c*n = 2*n = 2n, c*n = 3*2n = 6n, c*n = 4*6n = 24n, ...

简而言之,您在每次迭代时重新分配n的值。您需要将最近生成的术语存储在变量其他而不是n中。你将有三个变量。 n已修复,c每学期增加1,termc*n计算。

答案 1 :(得分:0)

调试后: 对不起,我很抱歉。

以下是解决方案:

T = int(raw_input())

final = []

for i in range(T):

    c = 2

    n = int(raw_input())



    a = []

    w = n

    while True:

        if w == 0:
            final.append(0)
            break

        b = set(str(w))

        for d in b:
            if int(d) not in a:
                a.append(int(d))

        if len(a) == 10:
            final.append(w)
            break

        w = n*c
        c += 1

for i in range(T):
        if final[i] == 0:
            print "Case #%d: INSOMNIA" %(i+1)
        else:
            print "Case #%d: %d" %(i+1,final[i])

问题在于我在每个循环中更改了n的初始值。因此,不是将它乘以增加的计数器,而是将它与自身和计数器相乘。

相反,使用w = n * c是正确的方法。

正如我从下来的投票和评论中看到的那样,每个人都因为没有调试而感到生气。我理解并会牢记这一点。 我得到解决方案的方式是使用一些打印语句来了解问题的确切位置。