zoukankan      html  css  js  c++  java
  • 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 } 
  • 相关阅读:
    MySQL简概
    IO模型
    协程
    multiprocessing模块
    Python线程的常见的lock
    111-使用post的方式传值(最简示例)
    110-使用正则匹配的方式从url获值
    109-get方式获取url传值
    108-使用表格,不依赖于后台而输入内容
    107-创建第一个动态模板
  • 原文地址:https://www.cnblogs.com/fu3638/p/7828715.html
Copyright © 2011-2022 走看看