• Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)


    题目链接:http://codeforces.com/contest/707/problem/C

    题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外两条边,否则输出-1“”。

    解题思路:下面是我从作业帮上找的- -,

     利用平方差公式
    令斜边为c,直角边为a、b,且b为最短边
    c²-a²=(c+a)(c-a)
    因此(c+a)(c-a)是完全平方数,且(c-a)是(c+a)的一个因数
    1、如果(c-a)=1,则(c+a)是完全平方数(最短边是任意大于2的奇数)
    例如:5、4、3;13、12、5;25、24、7;41、40、9;...
    2、如果(c-a)=2,则(c+a)/2是完全平方数(最短边是任意大于2的偶数)
    例如:5、3、4;10、8、6;17、15、8;26、24、10;...
    即:最短边是任意一个大于2的正整数,都可以配成一个三边都是整数的直角三角形.

    当直角边b已知,b<=2时无解,接下来分两种情况考虑:①b为奇数,因c-a=1得c=a+1,所以(c-a)*(c+a)=2*a+1=b*b,可得a=(b*b-1)/2.

                             ②b为偶数,因c-a=2得c=a+2,所以(c-a)*(c+a)=4*(a+1)=b*b,可得a=b*b/4-1.

    代码:

     1 #include<iostream>
     2 using namespace std;
     3 const int N=1e9+5;
     4 typedef long long LL;
     5 
     6 int main(){
     7     LL b;
     8     cin>>b;
     9     if(b>2){
    10         LL a;
    11         if(b%2){
    12             a=(b*b-1)/2;
    13             cout<<a<<" "<<a+1<<endl;
    14         }
    15         else{
    16             a=b*b/4-1;
    17             cout<<a<<" "<<a+2<<endl;
    18         }
    19     }
    20     else
    21         puts("-1");
    22     return 0;
    23 } 
  • 相关阅读:
    窗体间传值
    winform 导出datagridview 到excel
    单击单元格任意地方事件
    CLR via 随书笔记
    值类型和引用类型的区别
    System.Object简介
    装箱与拆箱
    静态类
    关于Linq2Sql有外键表的更新引发的问题。
    滑动切换页面
  • 原文地址:https://www.cnblogs.com/fu3638/p/7828715.html
Copyright © 2020-2023  润新知