【发布时间】: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);
}
【问题讨论】:
-
在内部循环中,当
a以dminaka1开始时,您要做的第一件事就是将其增加到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