Простой код для треугольника Паскаля без массивов или функций? - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь создать программу, которая выводила бы до h -ой строки паскальского треугольника. Я основал свой код на калькуляторе биномиального расширения. Мой код работает, когда h меньше 2, но для 3 и выше результат неправильный, и я не понимаю, почему.

h = int(input("Enter the height of Pascal's triangle to be displayed: "))

result = ""

n = 1
k1 = 1
k2 = 1
ctr = 0
combi = 1

for i in range(h,1,-1):
    n *= i

for row in range(h):
    for column in range(row+1):
        ctr = h - column
        for j in range(ctr,1,-1):
            k1 *= j
        for k in range(column,1,-1):
            k2 *= k
        combi = int(n/(k1*k2))
    result += str(combi) + " "
    print(result)

    k1 = 1
    k2 = 1
    ctr = 1
    combi = 1

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Для простого паскальского треугольника, чтобы получить элемент строки, который> 1, вы просто добавляете элемент, который находится прямо над ним, и элемент, который находится выше и слева (если нет ничего выше или выше и слева, вы добавляететолько одно число) Таким образом, вы получите правильный треугольник ряд Паскаля строка за строкой

Ниже функция генерирует список списков таким простым способом.Я не смог получить ваш подход, хотя

def pasc(n):
    res = [[1]]
    while len(res) < n:
        tmp = []
        for i in range(len(res[-1])+1):
            if i == 0 or i == len(res[-1]):
                tmp.append(1)
            else:
                tmp.append(res[-1][i-1] + res[-1][i])
        res.append(tmp)
    return res

for i in [' '.join(map(str,i)) for i in pasc(5)]:print(i)
0 голосов
/ 07 марта 2019

Я обнаружил, что усилия по отладке вашего кода были больше, чем попытка начать все заново.Вот один пример более простого решения:

h = int(input("Enter the height of Pascal's triangle to be displayed: "))

for row in range(h):
    for column in range(row + 1):

        if column > row - column:  # reflection about center
            column = row - column

        result = 1

        for i in range(column):
            result = (result * (row - i)) // (i + 1)

        print(result, end=" ")

    print()

Никаких массивов и функций нигде в поле зрения.

Вот еще одно решение с сайта Оксфордского математического центра , которое я перевел сJava для Python для вас:

# http://www.oxfordmathcenter.com/drupal7/node/76
# edu.emory.oxford.paul.oser

# prompt user to enter the number of rows
numRows = int(input("How many rows of Pascal's triangle would you like? "))

# generate numRows rows...
for row in range(numRows):

    # the first value is always a 1
    value = 1

    # later values can be found by successively
    # multiplying by a fraction that initially is row/1
    numerator = row
    denominator = 1

    # we will have to perform a total of row multiplications,
    # and with each one, the numerator goes down by one
    # and the denominator increases by one.
    for pos in range(row + 1):
        print(value, end=' ')
        value = value * numerator // denominator
        numerator -= 1
        denominator += 1

    # start a new row
    print()

Опять же, ни массивов, ни функций нигде не видно.

...