C 从周长找出三角形所有可能的边

标签 c

我一直得到 c 的负数,b 只打印 23,a 正常循环。当我将其放入周边时,至少输出加起来为 24。我觉得我只是一些愚蠢的逻辑错误。 我的代码如下。

写一个程序找出边长为整数的所有三角形和一个用户 指定的周长。您的程序应该找到所有三元组 a、b 和 c,其中 a + b + c 是用户指定的周长值。

  1 #include <stdio.h>
  2 
  3 int main() {
  4     int p, a, b, c;
  5     printf("Enter a perimeter: ");
  6     scanf("%d", &p);
  7 
  8     printf("Triangles with a perimeter: " " %d\n", p);
  9 
 10     for(a = 1; a < p; a++) {
 11         for(b = a;  b < p; b++)
 12             c = p - (a + b);
 13             b = p - (a + c);
 14             a = p - (b + c);
 15 
 16             printf("%d, %d, %d\n",a,b,c);
 17 
 18 }
 19     return 0;
 20 }

我认为这更像是一个面试问题,而不是初学者问题。

最佳答案

原始代码中有几处错误。有些与使三角形成为三角形的原因有关,有些与基本逻辑出错有关。

for (a = 1; a < p; a++)是错误的,因为三角形的一侧不能长于周长的一半。即使在周长的一半处,也会形成 2 条线,而不是三角形。

for (b = 1; b < (p - a); b++)是错误的,因为 a+b开始时将小于周长的一半。

c是根据p的值计算的, ab .

c = p - (a + b);

计算b的意义何在?和 a

b = p - (a + c);
a = p - (b + c);

作为Jonathan Leffler指出,代码应该只打印唯一的三角形。这可以通过添加条件 a<=b && b<=c 轻松实现。在 printf 之前声明。

感谢@JonathanLeffler 花时间调试这段简短的代码。发现一个错误导致代码由于 b 而跳过一些输出被初始化为一个更高的值,以及提前终止循环的内部 for 循环条件。

这是代码的更正版本。

#include <stdio.h>
int main() {
    int p, a, b, c;
    printf("Enter a perimeter: ");
    scanf("%d", &p);

    printf("Triangles with a perimeter: " " %d\n", p);

    for (a = 1; 2*a < p; a++) {
        for (b = 1; a+b < p; b++)
            if ((p-2*a) > 0 && (p-2*b) > 0 && (2*a+2*b-p) > 0) {
                c = p - (a + b);
                if(a<=b && b<=c)
                    printf("%d, %d, %d\n", a ,b, c);
            }
    }
    return 0;
}

现在让我们试试吧。

Enter a perimeter: 6
Triangles with a perimeter:  6
2, 2, 2

没错。一个有周长的三角形 6只有 1可能的组合。 1, 1, 4单位长边不会是三角形,除非你愿意弯曲 4 的边单位长。

Enter a perimeter: 12
Triangles with a perimeter:  12
2, 5, 5
3, 4, 5
4, 4, 4

关于C 从周长找出三角形所有可能的边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035818/

相关文章:

c - Linux 字符设备模块 : Why do we need both *owner and MOD_INC_USE_COUNT?

c - Xcode - double 比较

C(初学者): Why won't my qsort work? 编辑:从一个错误到另一个错误

将2个字节转换成12位数字?

c - 如何存储多达 1,000,000,000 个元素

c - 初始化 void 指针指向一个数组

c - 如何在流程图中表示函数?

c - Linux驱动模块编译问题

C: 使用 crypt(3) 实现 Sha512 加密

c - 在 OpenGL 中设置 3D 空间的尺寸