| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 421 人关注过本帖
标题:请帮忙改正一下!
只看楼主 加入收藏
huaheshang
Rank: 2
来 自:日照
等 级:论坛游民
帖 子:91
专家分:37
注 册:2010-12-7
结帖率:79.31%
收藏
已结贴  问题点数:6 回复次数:7 
请帮忙改正一下!
5 A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。求150<A+B+C<200且A>B>C的倒勾股数有多少组,a,b,c的取值为多少
#include<stdio.h>
main()
{
 int a,b,c,n=0;
  for(a=1;a<=100;a++)
   for(b=1;b<a;b++)
    for(c=1;c<b;c++)
while(a+b+c>150&&a+b+c<200)
{
 if(1.0/(a*a)+1.0/(b*b)==1.0/(c*c))
  {
    printf("(%d,%d,%d)\n",a,b,c);
    n++;
   }
}
printf("%d\n",n);
getch();
}问一下这个程序应该怎样修改?
搜索更多相关主题的帖子: 正整数 
2011-01-03 18:52
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
不能直接用等号,因为浮点计算有误差
你应该用这两个数的差的绝对值,看是否小于某指定常数(如1e-8),就判断为相等

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-03 18:58
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
改 if (fabs(1.0/(a*a) + 1.0/(b*b) - 1.0/(c*c)) < 1e-8)
要增加#include <math.h>

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-03 18:59
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
程序:
程序代码:
#include<stdio.h>
main()
{
    int a,b,c,n=0;
    for(a=1;a<=100;a++)
        for(b=1;b<a;b++)
            for(c=1;c<b;c++)
            {
                if(a+b+c<150||a+b+c>200)continue;
                if(1.0/(a*a)+1.0/(b*b)==1.0/(c*c))
                {
                    printf("%d,%d,%d\n",a,b,c);
                    n++;
                }
            }
            printf("%d\n",n);
            getch();
}
结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


Go Go Go
2011-01-03 19:04
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
更正一下:
程序:
程序代码:
#include<stdio.h>
main()
{
    int a,b,c,n=0;
    double d;
    for(a=1;a<=100;a++)
        for(b=1;b<a;b++)
            for(c=1;c<b;c++)
            {
                if(a+b+c<150||a+b+c>200)continue;
                d=1.0/(a*a)+1.0/(b*b)-1.0/(c*c);
                if(d<0.000001&&d>-0.000001)
                {
                    printf("%d,%d,%d\n",a,b,c);
                    n++;
                }
            }
            printf("%d\n",n);
            getch();
}
结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


Go Go Go
2011-01-03 19:20
huaheshang
Rank: 2
来 自:日照
等 级:论坛游民
帖 子:91
专家分:37
注 册:2010-12-7
收藏
得分:0 
如果还用while语句,该怎样改?可不可以改?
2011-01-03 19:31
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:6 
也可以的就是那个点
程序:
程序代码:
#include<stdio.h>
main()
{
    int a,b,c,n=0;
    double d;
    for(a=1;a<=100;a++)
        for(b=1;b<a;b++)
            for(c=1;c<b;c++)
                while(a+b+c>150&&a+b+c<200)
                {
                    d=1.0/(a*a)+1.0/(b*b)-1.0/(c*c);
                    if(d<0.000001&&d>-0.000001)
                    {
                        printf("%d,%d,%d\n",a,b,c);
                        n++;
                    }
                    break;
                }
                printf("%d\n",n);
                getch();
}
结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


Go Go Go
2011-01-03 19:39
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
回复 6楼 huaheshang
加个break跳出来就行了。。。。

Go Go Go
2011-01-03 19:40
快速回复:请帮忙改正一下!
数据加载中...
 
   



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

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