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

包括C中循环中的第一次迭代,c,for-loop,while-loop,do-while,C,For Loop,While Loop,Do While,我写这个程序是为了给用户所有锐角三角形的解,当他们给出最小值和最大值时。它可以正常工作,但解决方案似乎不包括循环的第一次迭代(例如,当min=1和max=45时,(1,1,1)不包括在解决方案中)。如何解决这个问题?我原以为问题出在a值的while循环上,但当我将其改为for循环时,问题仍然存在。如何使其包含这些第一个值 if (c >= dmin) { c = dmin; do { ++c; for (b = dmin; b < dm

我写这个程序是为了给用户所有锐角三角形的解,当他们给出最小值和最大值时。它可以正常工作,但解决方案似乎不包括循环的第一次迭代(例如,当min=1和max=45时,(1,1,1)不包括在解决方案中)。如何解决这个问题?我原以为问题出在a值的while循环上,但当我将其改为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);
}
如果(c>=dmin){
c=dmin;
做{
++c;
对于(b=dmin;bc)&((b+c)>a)&((c+a)>b)){
printf((%d,%d,%d)”,a,b,c);
}
}
}
}

}而(c将
++c;
移动到for循环之后,而不是之前

这会在开始之前将c增加到2,但您希望包括1


*注意,您可能需要添加条件,以防止最小值小于等于0。

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

这会在开始之前将c增加到2,但您希望包括1


*注意,您可能需要添加防止最小值小于等于0的条件。

如果
a
b
c
的值范围是
[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);
        }
      }
    }
  }
}
(c=dmin;cb)的

{
printf((%d,%d,%d)”,a,b,c);
}
}
}
}
}

如果
a
b
c
的值范围是
[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);
        }
      }
    }
  }
}
(c=dmin;cb)的

{
printf((%d,%d,%d)”,a,b,c);
}
}
}
}
}

在内部循环中,当
a
作为
dmin
aka
1
启动时,您要做的第一件事是将其递增到
2
…因此,永远不会测试
a==1
的版本。你需要修改逻辑。也许除了作为学习练习之外,使用所有三种嵌套的循环类型只是一场噩梦。对于健全的解决方案,应该有三个
for
循环。同时使用
c++
a=a+1
也很不一致。在我发布这篇文章后,我立即将其更改为a++。同样是的,我从三个
for
循环开始,但不幸的是,这是一个学习练习,需要所有3个作为一个学习练习,我首先使用
for
循环编写工作代码(仅限),然后仅使用
while
循环,然后仅使用
do…while
循环。然后,我将从3个工作解决方案中进行混合匹配。那样可能会更快。我肯定会从
for
循环解决方案开始;它是迄今为止最干净的,所有的循环控件都在一条线上;因为所有三角形的设计都至少有一个锐角。如果不是这样的话,您能否在内部循环中提供预期的输出,例如:min=1,max=5?当
a
作为
dmin
aka
1
启动时,您要做的第一件事是将其增加到
2
…因此
a==1
的版本永远不会被测试。你需要修改逻辑。也许除了作为学习练习之外,使用所有三种嵌套的循环类型只是一场噩梦。对于健全的解决方案,应该有三个
for
循环。同时使用
c++
a=a+1
也很不一致。在我发布这篇文章后,我立即将其更改为a++。同样是的,我从三个
for
循环开始,但不幸的是,这是一个学习练习,需要所有3个作为一个学习练习,我首先使用
for
循环编写工作代码(仅限),然后仅使用
while
循环,然后仅使用
do…while
循环。然后,我将从3个工作解决方案中进行混合匹配。那样可能会更快。我肯定会从
for
循环解决方案开始;它是迄今为止最干净的,所有的循环控件都在一条线上;因为所有三角形的设计都至少有一个锐角。如果不是这样,您能否提供预期的输出,例如:min=1,max=5?我在发布此消息后更改了a=a+1,并且在代码的前面部分(我没有发布的部分)确保值都大于0。但是谢谢你的帮助!很抱歉,我有点困惑,当我将
++c
移动到for循环之后,程序似乎已经跳过了最后两个循环,并且没有提供任何输出。您还需要进行循环。我在发布后更改了a=a+1,在代码的前面(我没有发布的部分),确保值都大于0。但是谢谢你的帮助!很抱歉,我感到困惑,当我将
++c
移动到for循环之后时,程序似乎已经跳过了最后两个循环,并且没有提供任何输出。您还需要进行循环