C++编程 已知A>B>C,A+B+C<100,求满足1/A*A+1/B*B=1/C*C的共有多少组,看看我为什么错了。

#include <iostream>
#include <cmath>
using namespace std;
main()
{
int A,B,C;
for(C=1;C<33;C++)
for(B=C+1;B<100;B++)
for(A=B+1;C<100;C++)
{
if( (A + B + C < 100) && ( (A * A * B * B) == ((A * A + B * B) * C * C) ) )
cout<<A<<'\t'<<B<<'\t'<<endl;
}
return(0);
}

( (A * A * B * B) == ((A * A + B * B) * C * C) )分式化整式好像没错,其实它是错的。int的最大值是65530 ,当你a=b=50的时候,A * A * B * B早早数据溢出了。将int 改为long就行了。还有你程序我调试了下,第三个for应该改为 for(A=B+1;A<100;A++)这样出来有两组数据。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-18
其实你的思路还是不错;不过对题目的理解偏差较大;
为什么你的理解是错误的:
按照你的代码,你认为1/A*A可以是分数;假如是这样,那么在判断代码里有一行比较:
(A * A * B * B) == ((A * A + B * B) * C * C) )
其实这个等式是不可能成立的;
因为右边总是比左边大;可以用着差法证明:右边-左边=A2C2+B2C2-A2B2=A2(C2-B2)+B2C2>C2(C2-B2)+B2C2>=C2(C2)>0;因此等式不可能成立;

其实对于1/A*A在0<A的情况下,就只有2种结果:0或1;本回答被网友采纳
第2个回答  2013-04-18
最里面的循环条件怎么是C。不是A么。。。
改成for(A=B+1;A<100;A++)就有输出了,但是感觉这个条件会多很多循环,应该可以优化下,但我没还想到。
第3个回答  2013-04-18
C++格式控制操作符是没有'\t'的,如要空位可输入' ',符号中间须1个空格以上,你写的程序与你要求不同。
第4个回答  2013-04-18
#include <iostream>
using namespace std;
void main()
{
double A,B,C;
for(C=1;C<33;C++)
for(B=C+1;B<100;B++)
for(A=B+1;A<100;A++)
{
if( (A+B+C<100) && (1/(A*A)+1/(B*B)==1/(C*C)))
cout<<A<<'\t'<<B<<'\t'<<C<<endl;
}
}
VC++6.0测过了

C++编程 已知A>B>C,A+B+C<100,求满足1\/A*A+1\/B*B=1\/C*C的共有多少组...
( (A * A * B * B) == ((A * A + B * B) * C * C) )分式化整式好像没错,其实它是错的。int的最大值是65530 ,当你a=b=50的时候,A * A * B * B早早数据溢出了。将int 改为long就行了。还有你程序我调试了下,第三个for应该改为 for(A=B+1;A<100;A++)这样...

用C++求130<A+B+C<150且A>B>C的倒勾股数有多少组
都同时乘以a*a*b*b*c*c得到的结果是b*b*c*c+a*a*c*c==a*a*b*b,因为abc都不可能为零,所以这个式子可以用 第二个地方就是bc的变换界限,因为A>B>C,你要是想让abc这三个变量对应ABC的话,那么我建议这么写 for(c=1;c<=100;c++){ for(b=c+1;b<=100;b++){ for(a=b+...

C++怎么编程:输入A,B,C,求A+B+C的结果
{int a,b,c;cin>>a>>b>>c;cout<<"a+b+c";return 0;}

C++中(a>b?a:b)>c?(a>b?a:b):c是什么意思
所以a>b?a:b,就是取a,b之中最大值。然后在拿这个值与c用?:运算符。就是求取abc中最大值。

用C++如何用乘方实现a*a*a+b*b*b+c*c*c
double pow(double X,int Y);pow(a, 3.0)+pow(b, 3.0) + pow(c,3.0)

C++程序编程,这道题哪位大神求求我吧
\/ 统计100-999之间个位、十位上的数字之和与百位上的数字相等的数(101、110、202、211……),把这些数按每行10个数的形式输出,最后输出这些数的个数。\/ int main() { int l = 0;for (int i = 100; i < 1000; i++) { if (i \/ 100 == i \/10 % 10 + i % 10) { cout <...

...b,c计算a\/b的值,保留c位小数,c<100,a<1000000,b<1000000
namespace std;int main(void){ int a,b,c,i; while(1){ cout << "Enter a , b & c(0<=a<1000000,0<b<1000000,0<=c<100)...\\n"; cin >> a >> b >> c; if(a<1000000 && b<1000000 && c<100 && c>=0 && b>0 && a>=0) break; cout <<...

c++中a> b?
c++中a>b?a:b是java里唯一的三元运算符,这的符号的意思是:如果?前面的式子为真,那么就返回冒号:左边的值;否则返回右边的值。你这个题目的意思就是:如果a大于b,那么c就等于a;如果a小于b,那么c就等于b。。也就是把a和b中较大的数赋值给c。

编写一个C++程序,输入a,b,c三个数,输出其中的最小值? (注:解答的方法...
include<stdio.h> int min(int a,int b,int c){ if(a>b) a=b;if(a>c) a=c;return a;} void main(){ int a,b,c;printf("input 3 numbers");scanf("%d%d%d",&a,&b,&c);a = min(a,b,c);printf("min:%d",a);} 给个分,谢谢。

...​中能满足形如: ab * cde = adb * ce 这样的算式一共有多少...
<stdio.h>void main(){int a,b,c,d,e;for(a=1;a<=9;a++)for(b=1;b<=9,b!=a;b++)for(c=1;c<=9,c!=b,c!=a;c++)for(d=1;d<=9,d!=a,d!=b,d!=c;d++)for(e=1;e<=9;e++){if((a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(b!=c)&&(b!=d)&&(b!=e...

相似回答