C语言问题,求大神改错,谢谢拉,我是小白,

已知A>B>C>0,A,B,C为整数,且A+B+C<100。求满足1/A2+1/B2=1/C2的A,B,C共有多少组。#include<stdio.h.>voidmain... 已知A>B>C>0,A,B,C为整数,且A+B+C<100。求满足1/A2 + 1/B2= 1/C2的A,B,C共有多少组。
#include<stdio.h.>
void main()
{
int i=0;
double A,B,C;
for(A=1;A<=100;A++)
for(B=1;B<=100;B++)
for(C=1;C<=100;C++)
{
if(A>B&&B>C&&C>0&&A+B+C<100)
{
if(1.0/(2*A)+1.0/(2*B)==1.0/2*C)
{
i++;
printf("A=%d B=%d C=%d\n",A,B,C);
}
}
}
printf("共有%d组\n",i);
}
求指导
展开
 我来答
千江月success
2013-01-19 · TA获得超过827个赞
知道小有建树答主
回答量:1031
采纳率:100%
帮助的人:900万
展开全部
改错版。。。。。。。。。。。。。。。。。。。。。。。。
#include<stdio.h>
#define MIN 0.00000000000000000001
void main()
{
int i=0;
int A,B,C;
float tmp;
for(A=1;A<=100;A++)
for(B=1;B<=100;B++)
for(C=1;C<=100;C++)
{
if(A>B&&B>C&&C>0&&A+B+C<100)
{
tmp = 1.0/(2*A)+1.0/(2*B) - 1.0/(2*C);
if(tmp < MIN && tmp>-MIN)
{
i++;
printf("A=%d B=%d C=%d\n",A,B,C);
}
}
}
printf("共有%d组\n",i);
}
----------------------------------------------------------
tmp = 1.0/(A*A)+1.0/(B*B) - 1.0/(C*C); //你题目好像是这个意思啊,我看²有点像。。
apple123sd
2013-01-29 · TA获得超过2551个赞
知道大有可为答主
回答量:7471
采纳率:0%
帮助的人:2512万
展开全部
#包括
无效的主要()
{
的int = 0;
I,J = 2,M;
(I = 2 <= 1000;我+ +)
{
为(J = 1; <= I / 2; J + +)
{
M = I% J;
(M == 0)
{
+ = J;

}
}
如果(S == I)
{
printf的(“已完成数=%d条\ n”,i)条;
}
= 0;
}
} BR />
应该在每个操作完成重新初始化为0,否则?一直累加,所以会输出不来(我也研究了很长一段时间。)
/>末数为6,28,496。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
壞壞Re人噯
2013-01-19 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:92.3万
展开全部
这个是改错题,还是你写的,让我们给你优化?
你的这个效率太低了,冗余的运算太多。
#include<stdio.h.>
int main() //现在新ANSI标准规定 main的返回值不能是VOID,需要是INT。
{
int i=0;
int A,B,C; //ABC是整数,如果是浮点数的,运算效率降低太多了。而且也不对。
for(C=1;C<33;C++) //C一定是小于33的,否则加上B和A 必然大于100。这个可以提高很多效率
{
for(B=C+1;B<(100-C)/2;B++) //B一定是大于C,并且加上A要小于100-C的。
{
for(A=B+1;A<100-B-C;A++)
{
if(AB==C(A+B)) //把原来的公式做下简单的变换,避免浮点运算的低效率。
i++;
}
}
}
printf("共有%d组\n",i);
return 0; //返回0,表示程序正常结束。
}

做这道题要先经过数学计算的,按你那种写法,效率实在太低了,就算出正确的结果,面试官或者老师也会很不满意。
经过简单的换算,这种写法比你的效率至少要高10倍。
C语言要的就是效率。
初学者的话,写程序的规范性很重要,花括号该加的要加上。注释要写上。养成良好的习惯,对以后的工作很有帮助。程序最难的就是后期的维护。
更多追问追答
追问
我自己写的,运行了没的结果
追答
写错了,应该是if(a*b==c*(a+b));
忘了加乘号了。大写
最好在if下面printf每组ABC的数,更为直观。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jungebulianai
2013-01-19 · TA获得超过338个赞
知道答主
回答量:127
采纳率:0%
帮助的人:62.1万
展开全部
没分没动力啊!我给你指出几处不合理的地方吧!首先题目说了A>B>C>0,那么在for循环里为什么还有ABC的初始值还都是1呢?还有A+B+C<100那么我假设啊A的最小值是1B的最小值是2,那么他们最大值是不是只能是96啊,我知道你想说A>B>C>0,在这里我只是假设。
for(B=1;B<97;B++)
for(C=2;C<97;C++)
for(A=3;A<97;A++)
这样不就有效率了吗。
既然for循环那样写了那么if(A+B+C<100)就可以直接这样写了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
phd121212
2013-01-19 · TA获得超过494个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:34.9万
展开全部

好好对比一下,你能懂的。。。

 

#include<stdio.h.>

void main()

{int i=0;

double A,B,C,t1,t2;

 

for(C=1;C<=97;C++)

{ for(B=C+1;B<=98;B++)

{   for(A=B+1;A<=99;A++)

    {   t1=1/A+1/B;

         t2=1/C;

       if(t1==t2)

       {i++;

        printf("A=%.0lf B=%.0lf C=%.0lf\n",A,B,C);

       }

}   }

}

printf("共有%d组\n",i);

}

 

 

为什么在我们自己用笔算时,只能算出(A=6,B=3,C=2)等前面几个?因为我们算的是绝对等于。而在计算机中,由于不同的数据类型,它的精度不一样,所以计算机只能在他的精度范围内取等。我们就拿A=91,B=78,C=42为例:因为double的精度为0.000000.所以1/91=0.010989,1/78=0.012821,1/42=0.023810,在其精度内有1/78+1/78=1/42。而实际上1/91,1/78,1/42都是无穷小数,不可能得到绝对等。

 

望采纳,哈。。。

谢谢

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式