想写一段输出a b c的程序,a b为100以内的正整数,c为(a^2+b^2)^(1/2)且c<=100.
#include<iostream>
int main()
{
int a = 0, b = 1, n;
double c;
while (a <= 100)
{
a = a + 1;
while (b <= 100)
{
n = a*a + b*b;
c = sqrt(n);
if (c <= 100)
{
std::cout << a << " " << b << " " << c
<< std::endl;
b = b + 1;
}
}
}
return 0;
}
运行结果只是运行了第二个循环,不知道是什么原因。
我想通过这个程序把100以内的勾股数找出来,但为什么输出的c不是(a^2+b^2)^(1/2)?而且由于条件问题,输出的a也到了99。要是想要找出100以内的勾股数还应该怎样修改一下程序?请您指点一下。
追答但为什么输出的c不是(a^2+b^2)^(1/2)? 因为你要求C是整数,所以取整了(取整肯定会出现误差)你可以把:c=(int)sqrt(a*a+b*b); 中的(int)去掉,然后把cout<<"a: "<<a<<" b: "<<b<<" c: "<<c<<endl;这句代码改成cout<<"a: "<<a<<" b: "<<b<<" c: "<<(int)c<<endl;结果会更符合题意。 你要求100以内的勾股数,很简单呀! 把取整那句改成c=a*a+b*b,然后 判断 是否小于等于100,符合就输出呀,不过while(a<=100)和while(b<=100)应该改成while(a<=10)和while(b<=10)就足够了,这样算法的效率会好很多。
那个b=1很关键啊
请问如果要让输出的c为整数要添加什么语句?
std:cout<<(int)c 把double强制转换成int输出
追问我想通过这个程序把100以内的勾股数找出来,但为什么输出的c不是(a^2+b^2)^(1/2)?而且由于条件问题,输出的a也到了99。要是想要找出100以内的勾股数还应该怎样修改一下程序?麻烦您了。
追答按照我自己的理解写的,你自己验证下吧
本回答被提问者采纳稍简化了一下,供参考:
#include<iostream>