EularProject 39:给周长推断构成直角三角形个数

华电北风吹

天津大学认知计算与应用重点实验室

完毕日期:2015/7/30

Integer right triangles

Problem 39

If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.

{20,48,52}, {24,45,51}, {30,40,50}

For which value of p ≤ 1000, is the number of solutions maximised?

Answer:

840

Completed on Thu, 30 Jul 2015, 04:51

Go to the thread for problem 39 in the forum.

利用的性质

b+c=l?a

c?b=a2l?a

a<=b<c

a+b>c

当中第二个性质整除a能够大大降低运算时间

__author__ = ‘zhengyi‘

def IsRightTriangle(abc):
    a2=pow(abc[0],2)
    b2=pow(abc[1],2)
    c2=pow(abc[2],2)
    temp=a2+b2-c2
    if temp==0:
        return 1
    else:
        if temp<0:
            return 0
        else:
            return -1

def Count(perimeter):
    count=0
    for a in range(1,perimeter//3):
        if pow(a,2)%(perimeter-a)!=0 or pow(a,2)//(perimeter-a)>=a:
            continue
        for b in range(max(perimeter//2-a,a),perimeter//2):
            temp=IsRightTriangle([a,b,perimeter-a-b])
            if temp==-1:
                break
            else:
                count+=temp
    return count

count=0
p=0
for i in range(1,1001):
    temp=Count(i)
    if temp>count:
        p=i
        count=temp

print(p)
时间: 2024-10-24 23:45:09

EularProject 39:给周长推断构成直角三角形个数的相关文章

EularProject 39:给周长判断构成直角三角形个数

华电北风吹 天津大学认知计算与应用重点实验室 完成日期:2015/7/30 Integer right triangles Problem 39 If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120. {20,48,52}, {24,45,51}, {30,40,50} For which

华为笔试:直角三角形个数

题目描述: 给定三角形周长p,求满足边长为整数且周长为p的直角三角形个数. 思路分析: 枚举的思想.首先想到就是利用一个双重循环: for(int i=1; i<p; i++) { for(int j=i; j<p; j++) { int k = p-i-j; if(i*i+j*j==k*k) ans++; } } 但这样是会超时的,通过数学方式做分析: i+j+k=p, 0<i<=j<k, 通过解不等式,可以得到:i<p/3, j<p/2. 在双重循环的基础上,

c语言练习39——向数列中插入一个数

#include<stdio.h> #include<stdlib.h> /*题目:一个数如果恰好等于除开它本身外的因子之和,这个数就称为“完数”.例如6=1+2+3.编程找出1000以内的所有完数*/ int main() { system("color 1F"); // 设定显示框为蓝底白字 system("mode con cols=80 lines=30"); //固定显示框尺寸 /**************************

直角三角形个数

#include <iostream> using namespace std; int main( ) { int a,b,c; for (a=1; a<20; a++) for (b=1; b<20; b++) for (c=1; c<=20; c++) if (a*a+b*b==c*c) printf("a=%d,b=%d,c=%d\n",a,b,c); system("pause"); return 1; } #include

7 判断输入字符个数

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 1 public class _007CountStringAll { 2 3 public static void main(String[] args) { 4 printCount(); 5 } 6 7 private static void printCount() { 8 while (true) { 9 Scanner scanner = new Scanner(System.in); 10 System.ou

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 程序分析:利用while语句,条件为输入的字符不为 '\n '. 1 package com.li.FiftyAlgorthm; 2 3 import java.util.Scanner; 4 5 /** 6 * 题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 7 * 8 * 程序分析:利用while语句,条件为输入的字符不为 '\n ' 9 * @author yejin 10 */ 11 pu

c语言代码编程题汇总 :统计字符串中的大写和小写字母的个数

统计字符串中的大写和小写字母的个数 程序代码如下: 1 /* 2 2017年3月6日19:42:21 3 功能:统计字符串中的大写和小写字母的个数 4 */ 5 6 #include "stdio.h" 7 void fun (char *,int *,int *); 8 9 int main (void) 10 { 11 int m = 0,n = 0; 12 int *Pm = &m, *Pn = &n; 13 char s[100]; 14 printf (&qu

Haskell高阶函数

Haskell functions can take functions as parameters and return functions as return values. A function that does either of those is called a higher order function. Higher order functions aren't just a part of the Haskell experience, they pretty much ar

R语言-查找满足条件的数并获取索引

1.在R语言中,怎样找到满足条件的数呢? 比如给定一个向量c2.要求找到数值大于0的数: > c2 [1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0.20 0.09 0.08 0.14 0.14 0.23 [15] 0.08 0.06 0.12 0.20 0.14 0.11 0.20 0.14 0.17 0.15 0.18 0.15 0.20 0.12 [29] 0.23 0.08 0.12 0.08 0.23 0.12 0.08 0.17 0.18 0