易码技术论坛

 找回密码
 加入易码
搜索
查看: 520|回复: 5

【求助】完了完了,我连这种程序都写不来了……

[复制链接]
发表于 2009-1-24 16:22:29 | 显示全部楼层 |阅读模式
【问题】求三条边长为100以内的整数,这样的直角三角形有多少个?

我写的源码(GVM2):
int i;
int r;
int o;
int t;
void main(){
SetLCDMode(0);
for(i=1;i<100;i++){
        for(r=i;r<100;r++){
                for(o=r;o<100;o++){
                        if(i*i+r*r==o*o || i*i+o*o==r*r || r*r+o*o==i*i)
                                if(i+r>o && i+o>r && r+o>i)t=t+1;                        
                }
        }
        }
        DigitOut(0,0,t);
        Refresh();
    getchar();
}
算出来是50个
大家做出来是多少,请回帖……
原本是应该用QB做的,结果做出来是0个(源码差不多)

[ 本帖最后由 Edjason 于 2009-1-24 16:25 编辑 ]
发表于 2009-1-24 17:27:22 | 显示全部楼层
这种问题很难的……
不过,貌似应该去掉相同打边?
比如3、4、5 和 3、5、4和 4、3、5 和 4、5、3等等

[ 本帖最后由 Alanwywy 于 2009-1-24 17:28 编辑 ]
发表于 2009-1-24 17:53:09 | 显示全部楼层
恩,你把i,r,o的范围都设定成1-99了,这样有重复
 楼主| 发表于 2009-1-25 11:53:45 | 显示全部楼层
原帖由 暗影 于 2009-1-24 17:53 发表
恩,你把i,r,o的范围都设定成1-99了,这样有重复


绝对不会有重复的,看清源码

i=1 to 100
r=i to 100
o=r to 100
发表于 2009-1-25 12:57:46 | 显示全部楼层
对了   这个算法不好诶
(a2+b2)2=(a2-b2)2+4a2b2
2表示平方,这个好点

而且就算你那个的话,o最大,本身只有可能i2+r2=o2...
好久没摸了。。。可能是这里,加括号,但是精简下。。。就变这样了                    
    if(i*i+r*r==o*o)
        if( i+r>o)t=t+1;

[ 本帖最后由 Still4 于 2009-1-25 13:04 编辑 ]
 楼主| 发表于 2009-1-25 14:10:41 | 显示全部楼层
还是楼上高见~~我的代码还可以精简…………
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-6 03:55 , Processed in 0.014772 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表