首页 > 解决方案 > Hackerrank“切棒”挑战在调试中正确但不输出

问题描述

我很难弄清楚我的代码在哪里失败。Hackerrank 有自己的样板测试,我还不习惯。Hackerrank 调试输出和我自己的 Ide 中的算法工作者,但在 Stdout 中返回“NoneNone”。我知道什么都不返回会创建无,但即使我执行“返回 '/n'.join(a_list) 它也不起作用。让我无法通过测试。我没有看到什么?https://www.hackerrank。 com/挑战/切入正题/问题

这不是重复的问题。否决票非常令人沮丧且无益的 nvm。

#!/bin/python3

import math
import os
import random
import re
import sys


def cutTheSticks(arr):
    currentSize = len(arr)

    while currentSize > 0:
        least = min(arr)
        print(currentSize)
        for stick in range(len(arr)):
            arr[stick] -= least
            if arr[stick] <= 0:
                arr[stick] = 0

        for i in range(arr.count(0)):
            arr.remove(0)

        currentSize = len(arr)
    return

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    result = str(cutTheSticks(arr))
    fptr.write(result)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

标签: pythonpython-3.xalgorithm

解决方案


您必须返回一个列表,其中包含在cutTheSticks函数的每个操作之前存在的棒数。主要是,样板文件将列表中存在的元素连接成一个字符串(您不需要将返回值显式转换为 str)。

def cutTheSticks(arr):
    currentSize = len(arr)
    result = []

    while currentSize > 0:
        least = min(arr)
        #print(currentSize)
        result.append(currentSize)
        for stick in range(len(arr)):
            arr[stick] -= least
            if arr[stick] <= 0:
                arr[stick] = 0

        for i in range(arr.count(0)):
            arr.remove(0)

        currentSize = len(arr)
    return result

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    result = cutTheSticks(arr)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

推荐阅读