这就是问题所在: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])
答案 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,term
由c*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是正确的方法。
正如我从下来的投票和评论中看到的那样,每个人都因为没有调试而感到生气。我理解并会牢记这一点。 我得到解决方案的方式是使用一些打印语句来了解问题的确切位置。