c语言求三角形公式

c语言求三角形公式,c,C,当您想通过输入三角形三条边的长度之和来创建三角形时,编写一个程序,输出可能三角形边的长度和三角形数。(三条边是整数变量。) (三角形两侧的长度之和大于另一侧的长度) 例如: Sum of three sides: 6 1 3 2\n 2 2 2\n 2 3 1\n 3 1 2\n 3 2 1\n number of triangle: 5 我的代码: #include <stdio.h> int main() { int a = 0, b = 0, c

当您想通过输入三角形三条边的长度之和来创建三角形时,编写一个程序,输出可能三角形边的长度和三角形数。(三条边是整数变量。) (三角形两侧的长度之和大于另一侧的长度)

例如:

Sum of three sides: 6

 1 3 2\n
 2 2 2\n
 2 3 1\n
 3 1 2\n
 3 2 1\n


number of triangle: 5
我的代码:

#include <stdio.h>

int main() {

    int a = 0, b = 0, c = 0, count=0;
    int sum = a + b + c;


    printf("Sum of three sides: ");
    scanf_s("%d", &sum);

    for (a = 1; a < sum; a++)
        for (b = 1; b < sum; b++)
            for (c = 1; c < sum; c++)

                if (a + b > c && a+b+c==sum)

                    printf("%d\t %d\t %d\n", a, b, c);


                    printf("number of triangle: %d", count );

}
#包括
int main(){
int a=0,b=0,c=0,count=0;
整数和=a+b+c;
printf(“三面之和:”);
扫描单位(“%d”和总和);
对于(a=1;ac&&a+b+c==sum)
printf(“%d\t%d\t%d\n”,a、b、c);
printf(“三角形数:%d”,计数);
}
我不知道如何输出三角形的数量以及如何放置 “三角形两边的长度之和大于另一边的长度”转化为代码


4 1
不是有效的三角形
a+b>c
是三角形公式。

您必须检查所有三条边的条件,并且必须增加
计数才能成功测试

#include<stdio.h>
#include<stdlib.h>

int main() {

    int a = 0, b = 0, c = 0, count=0;
    int sum = a + b + c;

    printf("Sum of three sides: ");
    scanf("%d", &sum);

    for (a = 1; a < sum; a++)
        for (b = 1; b < sum; b++)
            for (c = 1; c < sum; c++)
                if ((a+b+c==sum) && ((a + b > c) && (a + c > b) && (c + b > a)))
                {
                    printf("%d\t %d\t %d\n", a, b, c);
                    count++;
                }
    printf("number of triangles: %d", count );
}

正如在评论/回答中指出的,主要问题是您的代码只检查
a+b>c
,应该检查所有组合的“两个边的总和大于最后一个边”

此外,没有理由使用3个循环。当外部两个循环选择
a
b
时,
c
可以像
c=sum-a-b
那样计算。比如:

#include <stdio.h>

int main() {

    int a, b, c, count=0;
    int sum;

    printf("Sum of three sides: ");
    scanf_s("%d", &sum);

    for (a = 1; a < sum; a++)
    {
        for (b = 1; b < sum; b++)  
        {
            c = sum - a - b;
            if (c < 1) break; // No reason to continue so break out of inner loop

            if ((a + b > c) && (a + c > b) && (b + c > a))
            {
                printf("%d\t %d\t %d\n", a, b, c);
                ++count;
            }
        }
    }
    printf("number of triangle: %d", count );
    return 0;
}
#包括
int main(){
int a,b,c,count=0;
整数和;
printf(“三面之和:”);
扫描单位(“%d”和总和);
对于(a=1;ac)和&(a+c>b)和&(b+c>a))
{
printf(“%d\t%d\t%d\n”,a、b、c);
++计数;
}
}
}
printf(“三角形数:%d”,计数);
返回0;
}
通过考虑循环的条件,可以进一步提高程序性能:

    for (a = 1; a < sum; a++)
(a=1;a
真的有必要一直到
sum-1


是否有一个三角形,其中
a
大于或等于
sum/2

您的代码不会在任何位置增加
计数
变量。它就在那里,始终保持不变。此外,您只检查一方的有效性,而不是检查各方的条件是否满足

而且,您的示例输出错误,[1 3 2],[2 3 1],[3 1 2],[3 2 1]等都是无效的三角形。只有[2,2,2]满足三角形条件在将预期输出作为要求发布到此处之前,请交叉检查预期输出。

以下是可能的工作代码:

#include<stdio.h>

int main() {

    int a = 1, b = 1, c = 1, count=0;
    int sum = 0;

    printf("Sum of three sides: ");
    scanf("%d", &sum);

    while(a < sum) {
      b=1;
        while(b < sum) {
          c=1;
            while(c < sum) {
                if ((a+b+c == sum)&&(a+b>c)&&(a+c>b)&&(c+b>a))
                {
                  count+=1;
                  printf("Triangle %d:\nSide 1: %d   Side 2: %d   Side 3: %d\n\n", count, a, b, c);
                }
              c++;
            }
          b++;
        }
      a++;
    }
    printf("Possible number of triangles: %d", count );
    return(0);
}
#包括
int main(){
INTA=1,b=1,c=1,计数=0;
整数和=0;
printf(“三面之和:”);
scanf(“%d”,和);
while(ac)&&(a+c>b)&(c+b>a))
{
计数+=1;
printf(“三角形%d:\n边1:%d边2:%d边3:%d\n\n”,计数,a,b,c);
}
C++;
}
b++;
}
a++;
}
printf(“可能的三角形数:%d”,计数);
返回(0);
}

如果目的是统计成功测试的数量,那么条件((a+b+c==sum)和((a+b>c)和((a+c>b)和((c+b>a)))可能会通过添加(&&a
count)来改善。如果目的是统计成功测试的数量,则不会修改自身。花括号和缩进。注意内环的起始值,以防止重复解决方案,例如,当
sum
为12时,为了防止找到3,4,5的所有排列。对我来说,“解决方案”1 3 2似乎是一个非常糟糕的问题triangle@Swordfish否,符合逻辑且正确,因为所有3个都必须为真。然而,评论中的最后一句话是:
。&&a+c>d
但它应该是
b
而不是
d
。只是一个小的输入错误。
sum==7时,只有两个不同的三角形。
边a、b和c的值不同。我不知道他是否想要完全独一无二的三角形。从这个例子来看,还可以。对于一个初学者,我不鼓励给出完整的答案,因为现在他/她什么都没学到。这是他问的第一个问题。所以有一些回旋余地…:)。不管怎样,我写下了他必须检查和增加计数器的条件。他剩下的代码没问题。
#include<stdio.h>

int main() {

    int a = 1, b = 1, c = 1, count=0;
    int sum = 0;

    printf("Sum of three sides: ");
    scanf("%d", &sum);

    while(a < sum) {
      b=1;
        while(b < sum) {
          c=1;
            while(c < sum) {
                if ((a+b+c == sum)&&(a+b>c)&&(a+c>b)&&(c+b>a))
                {
                  count+=1;
                  printf("Triangle %d:\nSide 1: %d   Side 2: %d   Side 3: %d\n\n", count, a, b, c);
                }
              c++;
            }
          b++;
        }
      a++;
    }
    printf("Possible number of triangles: %d", count );
    return(0);
}