【问题标题】:Including first iteration in loop in C在 C 中的循环中包括第一次迭代
【发布时间】:2015-10-16 16:23:38
【问题描述】:

我编写这个程序是为了在用户给出最小值和最大值时为用户提供所有锐角三角形的解决方案。它可以正常工作,除非解决方案似乎不包括循环的第一次迭代(例如,在 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);
}

【问题讨论】:

  • 在内部循环中,当admin aka 1 开始时,您要做的第一件事就是将其增加到2...所以a == 1 的版本是从未测试过。你需要修改逻辑。除了作为学习练习之外,使用嵌套的所有三种循环类型只是一场噩梦。对于理智的解决方案,应该有三个 for 循环。同样使用c++a = a + 1; 也相当不一致。
  • 我在发布此内容后立即将其更改为 a++。也是的,我从三个 for 循环开始,但不幸的是,这是一个需要全部 3 个循环的学习练习
  • 作为学习练习,我首先使用for 循环(仅)编写工作代码,然后仅使用while 循环,然后仅使用do … while 循环。然后我会从 3 个工作解决方案中混合使用。那样可能会更快。我肯定会从for 循环解决方案开始;它是迄今为止最干净的,所有循环控件都在一行中。
  • 我认为您的意思是等腰三角形,而不是锐角;因为所有三角形的设计都至少有 1 个锐角。如果不是这种情况,您能否提供预期的输出: min=1, max=5?

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


【解决方案1】:

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

这甚至在开始之前将 c 递增到 2,但您希望包括 1。

*注意,您可能需要添加条件以防止最小值为 0 或更少。

【讨论】:

  • 我在发布此内容后更改了 a = a + 1,并且在代码的前面部分(我没有发布的部分)确保值都是 >0。但是感谢您的帮助!
  • 对不起,我很困惑,当我将 ++c 移到 for 循环之后,程序似乎完全跳过了最后两个循环并且没有提供任何输出
  • 您还需要制作循环
【解决方案2】:

如果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);
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2014-05-29
    相关资源
    最近更新 更多