0

uVA 382( https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=318 ) 相当简单:给定一个数字,说出它是完美、不足还是丰富的数字。但似乎我的格式有问题。这是问题想要的:

输出的第一行应为“PERFECTION OUTPUT”。接下来的 N 行输出应该列出每个输入整数是完美的、不足的还是丰富的,如下例所示。格式计数:回显的整数应在输出行的前 5 个空格内右对齐,后跟两个空格,然后是整数的描述。输出的最后一行应为“END OF OUTPUT”。

这是我的代码:

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,并且我得到了正确的答案,我认为问题不在于算法。我认为这是关于输出的格式,但不知道我做错了什么。

4

1 回答 1

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")

看看这对你是否更有效。否则,请包含您的原始程序产生的确切错误消息。

于 2019-06-16T02:46:23.343 回答