包括C中循环中的第一次迭代
我写这个程序是为了给用户所有锐角三角形的解,当他们给出最小值和最大值时。它可以正常工作,但解决方案似乎不包括循环的第一次迭代(例如,当min=1和max=45时,(1,1,1)不包括在解决方案中)。如何解决这个问题?我原以为问题出在a值的while循环上,但当我将其改为for循环时,问题仍然存在。如何使其包含这些第一个值包括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
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
aka1
启动时,您要做的第一件事是将其递增到2
…因此,永远不会测试a==1
的版本。你需要修改逻辑。也许除了作为学习练习之外,使用所有三种嵌套的循环类型只是一场噩梦。对于健全的解决方案,应该有三个for
循环。同时使用c++
和a=a+1
也很不一致。在我发布这篇文章后,我立即将其更改为a++。同样是的,我从三个for
循环开始,但不幸的是,这是一个学习练习,需要所有3个作为一个学习练习,我首先使用for
循环编写工作代码(仅限),然后仅使用while
循环,然后仅使用do…while
循环。然后,我将从3个工作解决方案中进行混合匹配。那样可能会更快。我肯定会从for
循环解决方案开始;它是迄今为止最干净的,所有的循环控件都在一条线上;因为所有三角形的设计都至少有一个锐角。如果不是这样的话,您能否在内部循环中提供预期的输出,例如:min=1,max=5?当a
作为dmin
aka1
启动时,您要做的第一件事是将其增加到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循环之后时,程序似乎已经跳过了最后两个循环,并且没有提供任何输出。您还需要进行循环