标题:哪里问题,求解。
只看楼主
glglzb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:22
注 册:2011-10-12
结帖率:93.33%
已结贴  问题点数:20 回复次数:4 
哪里问题,求解。
题目描述:
毕达哥拉斯三元组
时间限制:1000 ms  |  内存限制:8192 KB
描述
一个直角三角形的边长可以都是整数,此时这组代表边长的整数就称为一个毕达哥拉斯三元组。直角三角形三条边的边长必须满足关系:两直角边的平方和等于斜边的平方。请编写一个程序,要求寻找出三个值(用变量side1和side2分别代表两个直角边,用变量hypotenuse代表斜边)都不大于500的所有毕达哥拉斯三元组。请使用一个三层嵌套的for循环来尝试所有的可能性。

输入
(无)

输出
输出每条边不大于500的毕达哥拉斯三元组,每行一组(3个数从小到大用空格隔开)。


注意顺序,三元组按左至右非降的顺序输出。

样例输入
(无)样例输出
3 4 5
5 12 13
. . .
. . .
(以下省略)
我的代码:
#include <stdio.h>
int main()
{
   
int a,b,c;
   
for(a=1;a<500;a++)
        
for(b=1;b<500;b++)
            
for(c=1;c<500;c++)
            
{
               
if(a*a+b*b==c*c&&b>a&&c>b)
                    
printf("%d %d %d\n",a,b,c);
            
}
   
return 0;
}
Online Judge 显示的是结果错误,望大家指点。
搜索更多相关主题的帖子: 三元 可能性 三角形 
2012-02-12 10:36
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:16 
每条边不大于500,它的另一个描述是每条边小于等于500。你少了等于500的部分。

你的算法过于冗余。c的循环完全没必要,a,b的循环有一半也是在做多余的运算。修改正确后AC的时间是713ms。
下面的代码是去掉冗余部分的精简算法,AC时间是8ms。
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int a, b, c, cc;
    for(a = 1; a <= 500; a++)
    for(b = a + 1; b <= 500; b++)
    {
        cc = a * a + b * b;
        c = sqrt(cc);
        if(c <= 500 && c * c == cc) printf("%d %d %d\n", a, b, c);
    }
    return 0;
}

重剑无锋,大巧不工
2012-02-12 11:24
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:2 
回复 2楼 beyondyf
杨大哥的代码很值得学习

                                         
===========深入<----------------->浅出============
2012-02-12 11:36
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:2 
回复 3楼 laoyang103
还可以继续优化,当cc>250000时没必要进行开方运算。不过这种优化只是代码级的,算法级没有本质的差别。试了一下,速度还可以提高1ms

重剑无锋,大巧不工
2012-02-12 11:59
glglzb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:22
注 册:2011-10-12
得分:0 
谢谢
2012-02-12 12:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360768-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147126 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved