C++ C++;:“查找直角三角形”算法未获得预期结果

C++ C++;:“查找直角三角形”算法未获得预期结果,c++,function,class,C++,Function,Class,各位。我已经花了好几个小时,试图写一个函数,它将穷尽地搜索周长在一定范围内的所有直角三角形。为了澄清这一点,该函数将头文件中定义的类用作三角形,例如: /* * triangles.h * Header file for triangle class. */ // make sure this file is not included multiple times: #pragma once #include <vector> using std::vector; class

各位。我已经花了好几个小时,试图写一个函数,它将穷尽地搜索周长在一定范围内的所有直角三角形。为了澄清这一点,该函数将头文件中定义的类用作三角形,例如:

/*
 * triangles.h
 * Header file for triangle class.
*/
// make sure this file is not included multiple times:
#pragma once

#include <vector>
using std::vector;

class triangle {
    public:
        // member functions:
        // constructor (this is an inline version):
        triangle(unsigned long a=3, unsigned long b=4, unsigned long c=5):
        s1(a),s2(b),s3(c) {}
    unsigned long perimeter();
    unsigned long area();
    void print();  // prints to standard output
    // member variables:
    // integers for the 3 sides:
    unsigned long s1;
    unsigned long s2;
    unsigned long s3;
};

vector<triangle> findRightTriangles(unsigned long l, unsigned long h);
bool congruent(triangle t1, triangle t2);
bool similar(triangle t1, triangle t2);
/*
*三角形
*三角形类的头文件。
*/
//确保未多次包含此文件:
#布拉格语一次
#包括
使用std::vector;
阶级三角{
公众:
//成员职能:
//构造函数(这是一个内联版本):
三角形(无符号长a=3,无符号长b=4,无符号长c=5):
s1(a)、s2(b)、s3(c){}
无符号长周长();
无符号长区域();
void print();//打印到标准输出
//成员变量:
//三个边的整数:
无符号长s1;
无符号长s2;
无符号长s3;
};
矢量FindRight三角形(无符号长l、无符号长h);
布尔全等(三角形t1,三角形t2);
布尔相似(三角形t1,三角形t2);
函数findRightTriangles是实现文件中需要完成的函数。到目前为止,我有以下几点:

vector<triangle> findRightTriangles(unsigned long l, unsigned long h) {
    // TODO: find all the right triangles with integer sides,
    // subject to the perimeter bigger than l and less than h
    vector<triangle> retval; // storage for return value.
    unsigned long a = 1, b = 1, c = l;

    for (a = 1; h >= (a+b+c); a++) { //perimeter a+b+c is less than h

        if (((a*a) + (b*b)) == (c*c)) { //check if a, b, and c are sides of a right triangle, then plug them into retval.
            triangle t1(a,b,c);
            retval.push_back(t1);
    }

        for (b = 1; h >= (a+b+c); b++) { //go through values of b for right triangles.

            if (((a*a) + (b*b)) == (c*c)) {
                triangle t1(a,b,c);
                retval.push_back(t1);
            }

            for (c = l; h >= (a+b+c); c++) {

                if (((a*a) + (b*b)) == (c*c)) {
                    triangle t1(a,b,c);
                    retval.push_back(t1);
                }
            }
        }
    }

    return retval;
}
矢量findRightTriangles(无符号长l、无符号长h){
//TODO:找到所有边为整数的直角三角形,
//以周长大于l小于h为准
vector retval;//返回值的存储。
无符号长a=1,b=1,c=l;
对于(a=1;h>=(a+b+c);a++{//周长a+b+c小于h
如果((a*a)+(b*b))==(c*c)){//检查a、b和c是否是直角三角形的边,然后将它们插入retval。
三角形t1(a,b,c);
返回。推回(t1);
}
对于(b=1;h>=(a+b+c);b++){//遍历右三角形的b值。
如果((a*a)+(b*b))==(c*c)){
三角形t1(a,b,c);
返回。推回(t1);
}
对于(c=l;h>=(a+b+c);c++){
如果((a*a)+(b*b))==(c*c)){
三角形t1(a,b,c);
返回。推回(t1);
}
}
}
}
返回返回;
}

但是,在main.cpp中,当我调用该函数时,它不会返回任何内容。我一次又一次地尝试遵循逻辑,但我看不出函数在哪里失败。任何帮助都将不胜感激。

在您的
for(c…
循环结束时,c将是这样的
h>=(a+b+c)
为假。然后,当您在
for(b…
循环中循环测试
h>=(a+b+c)
时,它将立即失败。请尝试在for循环后将
c
设置为1(对于
b
)也一样),或者将for循环更改为

for (a = 1; h >= (a+1+1); a++) { //perimeter a+b+c is less than h

因此,当b和c达到最大值时,您不会对它们进行测试。

请提供完整(但最小)的可编译代码集,以显示问题,以便我们可以帮助您进行调试。代码太多,无法处理。请减少您发布的代码量,并准确显示哪些值不是您期望的值。