生成直角三角形c ++

时间:2016-06-01 20:12:50

标签: c++

我正在尝试制作一个程序,该程序将根据以下输入生成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;
} 

如果您认为我应该改进算法,请向我提示正确的方向。 谢谢你的时间。

1 个答案:

答案 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循环中的条件。)