编写一个程序,当您想通过输入三角形三边的长度之和来创建三角形时,输出可能三角形的边长和三角形数。(整数变量。) (三角形两侧的长度之和大于另一侧的长度)
例如:
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 );
}
我不知道如何输出三角形数量以及如何放置 代码中写出“三角形的两个边的长度之和大于另一边的长度”。
4 1 1
不是有效的三角形。 a + b > c
是三角形公式。
答案 0 :(得分:1)
正如评论/答案中所指出的那样,主要问题是您的代码仅检查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;
}
您可以通过考虑循环的条件来进一步提高程序性能:
for (a = 1; a < sum; a++)
真的有必要一路继续前进到sum - 1
吗?
是否会存在一个a
大于或等于sum/2
的三角形?
答案 1 :(得分:0)
您必须检查所有三个方面的条件,并且必须递增count
才能成功进行测试。
#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 );
}
输出:
Sum of three sides: 6
2 2 2
number of triangle(s): 1
Sum of three sides: 7
1 3 3
2 2 3
2 3 2
3 1 3
3 2 2
3 3 1
number of triangle(s): 6
答案 2 :(得分:0)
您的代码在任何地方都不会增加count
变量。整个过程都保持不变。另外,您只检查一侧的有效性,而不是所有侧的条件是否满足。
而且,您的示例输出错误, [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);
}
答案 3 :(得分:0)
可以通过添加&& a来改进条件((a + b + c == sum)&&((a + b> c)&&(a + c> b)&&(c + b> a))) <= b && b <= c避免生成双三角形。例如3 3 1与3 1 3和1 3 3相同。 (我之所以回答这个问题是因为我没有足够的声誉来发表评论。)