Project Euler-Integer right triangles

# Integer right triangles
from math import sqrt

MAX_PERIMETER = 1000


class RightTriangle(object):
    def __init__(self, *args):
        self.__side1 = args[0]
        self.__side2 = args[1]
        self.__complete()

    # calculate side3 and perimeter
    def __complete(self):
        self.__side3 = sqrt(self.__side1 ** 2 + self.__side2 ** 2)
        self.__perimeter = self.__side1 + self.__side2 + self.__side3

    def perimeter(self):
        return self.__perimeter

    def jude(self):
        global MAX_PERIMETER
        if self.__perimeter % 1 == 0 and self.__perimeter <= MAX_PERIMETER:
            return True
        else:
            return False


if __name__ == '__main__':
    # store solution in MyList
    MyList = [0 for _ in xrange(0, MAX_PERIMETER + 1)]

    for i in xrange(1, MAX_PERIMETER / 2):
        for j in xrange(1, MAX_PERIMETER / 2):
            tmp = RightTriangle(i, j)
            if tmp.jude():
                # if jude is true, let solution number add one
                MyList[int(tmp.perimeter())] += 1

    # print perimeter of triangle that has max solutions
    Max_Solution = max(MyList)
    for i in xrange(1, MAX_PERIMETER + 1):
        if MyList[i] == Max_Solution:
            print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值