包括C中循环的第一次迭代

时间:2015-10-16 16:23:38

标签: c for-loop while-loop do-while

我编写了这个程序,当用户给出最小值和最大值时,为用户提供所有锐角三角形解决方案。它正常工作,除了似乎解决方案不包括循环的第一次迭代(例如,min = 1和max = 45,(1,1,1)不包括在解决方案中)。怎么解决这个问题?我认为问题在于我的while循环的a值,但当我将其更改为for循环时,问题仍然存在。我怎么能包含这些第一个值?

if (c >= dmin) {
    c = dmin;
    do {
        ++c;
        for (b = dmin; b < dmax; b++) {
            a = dmin;
            while (a < dmax) {
                a = a + 1;
                if (a * a + b * b - c == c * c) {
                    if (((a + b) > c) && ((b + c) > a) && ((c + a) > b)) {
                        printf("(%d, %d, %d)", a, b, c);
                    }
                }
            }
        }
    } while (c <= dmax);
}

2 个答案:

答案 0 :(得分:5)

在for循环之后而不是之前移动++c;

在它开始之前将c增加到2,但是你想要包含1。

*注意,您可能希望添加阻止最小值为0或更小的条件。

答案 1 :(得分:0)

如果abc的值范围为[dmin..dmax](包括两者),则示例如下所示:

for (c = dmin; c <= dmax; c++)
{
  for (b = dmin; b <= dmax; b++)
  {
    for (a = dmin; a <= dmax; ++a)
    {
      if (a * a + b * b - c == c * c )
      { 
        if (((a + b) > c) && ((b + c) > a) && ((c + a) > b)) 
        {
          printf("(%d, %d, %d)", a, b, c);
        }
      }
    }
  }
}