我正在尝试制作一个程序,该程序将根据以下输入生成3个边:允许的最长边斜边和所需的三角形数。双方只能是整数。 我写的程序只挂在我身上,不会返回任何输出。 如果你要向我求助,请解释原因。
#include <iostream>
#include <cmath>
#include <cstdlib>
int generator(int number, int hypoth){
int a,b,c;
while (number>0){
c=rand()%(hypoth-1)+1;
for (a=1;a<hypoth-2;a++){
for (b=1;pow(a,2)+pow(b,2)<=pow(c,2); b++){
if (pow(a,2)+pow(b,2)==pow(c,2)){
std::cout<<"sides: "<<a<<" "<<b<<" "<<c<<std::endl;
number--;
}
}
}
}
return 0;
}
int main(){
int triangle_number, hypothenuse;
std::cout << "How many triangles to generate? ";
std::cin >> triangle_number;
std::cout << "How long is max hypothenuse?";
std::cin >> hypothenuse;
generator(triangle_number, hypothenuse);
return 0;
}
如果您认为我应该改进算法,请向我提示正确的方向。 谢谢你的时间。
答案 0 :(得分:2)
您提供的代码在我的机器上运行正常:输入1和6会输出sides: 3 4 5
。
但是,问题可能来自以下行:pow(a,2)+pow(b,2)==pow(c,2)
。 pow
会返回double
。比较浮点数字的平等是否很滑,实际上从来都不是一个好主意,因为它可能会被一小部分关闭,并且是错误的。
将其替换为a*a + b*b == c*c
(以及a*a + b*b <= c*c
上方的for循环中的条件。)