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);
}
求指导 展开
#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); //你题目好像是这个意思啊,我看²有点像。。
无效的主要()
{
的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。
你的这个效率太低了,冗余的运算太多。
#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的数,更为直观。
for(B=1;B<97;B++)
for(C=2;C<97;C++)
for(A=3;A<97;A++)
这样不就有效率了吗。
既然for循环那样写了那么if(A+B+C<100)就可以直接这样写了
好好对比一下,你能懂的。。。
#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都是无穷小数,不可能得到绝对等。
望采纳,哈。。。
谢谢