uVA 382(https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=318)非常简单:给定一个数字,说出它是一个完美的,不足的还是丰富的数字。但是似乎格式化存在问题。问题是这样的:
输出的第一行应显示为“ PERFECTION OUTPUT”。接下来的N行输出应列出 每个输入整数(无论是完美的,不足的还是丰富的),如下例所示。格式 counts:回显的整数应在输出行的前5个空格内右对齐 两个空格,然后是整数的说明。输出的最后一行应显示为 “输出结束”。
这是我的代码:
def sum_divisors(n):
sm = 0
for i in range(1, n):
if n % i == 0:
sm += i
return sm
n = list(map(int, input().split()))
n.pop()
print("PERFECTION OUTPUT")
for i in n:
sm = sum_divisors(i)
if sm == i:
state = "PERFECT"
if sm < i:
state = "DEFICIENT"
if sm > i:
state = "ABUNDANT"
spaces = ' ' * (5 - len(str(i)))
print("{}{} {}".format(spaces, i, state))
print("END OF OUTPUT")
现在,我已经尝试过将uDebug与许多不同的输出配合使用,并且得到了正确的答案,我认为问题不在于算法。我认为这与输出的格式有关,但不知道我出了什么问题。
答案 0 :(得分:0)
是否存在特定的错误消息,导致您的格式化失败?我认为暂时没有问题。根据测试的严格程度,考虑输入之间的差异:
15 28 6 56 60000 22 496 0
和:
15 28 6 56 60000 0 22 496
以及您的代码如何处理它们。严格来说,我们将输入的数字列表从零结束。但是您的解决方案将包括它并扔掉496。
这是对代码的重做,以解决该问题以及样式建议:
def sum_divisors(n):
summation = 0
for divisor in range(1, n // 2 + 1):
if n % divisor == 0:
summation += divisor
return summation
numbers = map(int, input().split())
print("PERFECTION OUTPUT")
for number in numbers:
if number == 0:
break
summation = sum_divisors(number)
if summation < number:
status = "DEFICIENT"
elif summation > number:
status = "ABUNDANT"
else:
status = "PERFECT"
print("{:5} {}".format(number, status))
print("END OF OUTPUT")
看看这对您是否更好。否则,请包含原始程序产生的确切错误消息。