Codeforces Problem 407A. Triangle

题目:http://codeforces.com/problemset/problem/407/A

题意:给你三角形的两条直角边,求是否存在边不与坐标轴平行的三角形。存在输出三个顶点,否则输出NO。

思路:两点要注意,YES 和NO 是大写,三个顶点形成的是三角形。我的想法是求出两条直角边作为斜边时候,与坐标轴平行的边的长度,那么对应的就会有一个直角梯形。这样就会存在两个求斜边长的公式,如果两个公式都满足的话,就是符合我们要求的。

如图:

                                             


ia,ja 和 ib, jb 都不会超过直角边 a 和 b 。

代码如下:

#include <stdio.h>


int main(){
    int a, b;
    scanf("%d%d", &a, &b);
    int ia, ja, ib, jb;
    int i, j;
    int flag = 0;
    i = 1; j = 2;

    for(ia = 1; ia < a; ++ia)
        for(ja = 1; ja < a; ++ja){
            if(ia*ia + ja*ja == a*a){
                for(ib = 1; ib < b; ++ib)
                    for(jb = 1; jb < b; ++jb)
                        if(ib*ib + jb*jb == b*b){
                            if(ia != ib){
                                if((ja+jb)*(ja+jb) + (ia-ib)*(ia-ib) == a*a + b*b){
                                    flag = 1;
                                    goto pt1;
                                }
                            }
                            else if(ia != jb)
                                if((ib+ja)*(ib+ja) + (ia-jb)*(ia-jb) == a*a + b*b){
                                    flag = 2;
                                    goto pt2;
                                }
                        }
            }
        }
    pt1: if(flag == 1){
        printf("YES\n");
        printf("%d %d\n", i, j);
        printf("%d %d\n", i + jb, j + ib);
        printf("%d %d\n", i - ja, j + ia);
    }

    pt2: if(flag == 2){
        printf("YES\n");
        printf("%d %d\n", i, j);
        printf("%d %d\n", i + ib, j + jb);
        printf("%d %d\n", i - ja, j + ia);
    }

    if(!flag)
        printf("NO\n");
    return 0;
}

其实,有flag判断了就没必要设置两个Label。直接让循环跳出来就行了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值