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)))可能会通过添加(&&acount)来改善。如果目的是统计成功测试的数量,则不会修改自身。花括号和缩进。注意内环的起始值,以防止重复解决方案,例如,当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);
}