Найдите наименьший возможный периметр прямоугольника - PullRequest
2 голосов
/ 14 июля 2020

Описание

Найдите наименьший возможный периметр прямоугольника и его размеры. Я не уверен, как реализовать это в python, когда область не является идеальным квадратом.

Пример ввода

Площадь в единицах

100
15
195

Пример вывода

Minimum perimeter is 40 with dimensions 10 x 10
Minimum perimeter is 16 with dimensions 3 x 5
Minimum perimeter is 56 with dimensions 13 x 15

Мой код

Мой код может найти минимум, только если площадь представляет собой идеальный квадрат root.

Код принимает несколько входных данных и завершается, если вводится 0.

import math

zero = False

while not zero:
    newInput = int(input())
    if newInput == 0:
        zero = True
    else:
        l = math.sqrt(newInput)
        sq = l * l

        if sq == l:
            print('Minimum perimeter is ' + l + ' with dimensions ' + l + ' x ' + l)
        
        else:
             # I don't know how to find minimum perimeter and its dimensions, when the integer is not a perfect square


            

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Из ваших примеров я предполагаю, что длина и ширина должны быть целыми числами. В противном случае вы можете просто взять квадрат root области, и все готово.

В этом предположении мы отмечаем, что A = l*w. Другими словами, длина и ширина являются факторами площади. Итак, первым делом нужно составить список всех факторов области. Я предлагаю начать с распечатки этого списка для заданного числа.

Когда у вас есть столько, вы можете использовать тот же l oop, чтобы найти минимальный периметр. Если пара чисел для длины и ширины является коэффициентом площади, тогда вы вычисляете периметр. Если он меньше любого рассчитанного вами периметра, сохраните его. Когда l oop закончится, распечатайте минимальный периметр, который вы нашли.

Обратите внимание, как я описываю процесс решения этой проблемы словами. Это всегда первый шаг в написании любой компьютерной программы. Вам следует начинать писать код только после того, как у вас будет четкое понимание шагов, выполняемых этим способом.

1 голос
/ 14 июля 2020

Начиная с квадрата root области, найдите следующее наименьшее целое число, которое равномерно делит область. Разделите площадь на это, чтобы получить соответствующую ширину. Затем добавьте 2l + 2w, чтобы получить перимитер.

while True:
    newInput = int(input())
    if newInput == 0:
        break
    else:
        l = floor(math.sqrt(newInput))
        while newInput % l ! = 0:
            l -= 1
        w = newInput / l
        print('Minimum perimiter is %.2f with dimensions %.2f x %.2f' % (2 * l + 2 * w, l, w))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...