题目如下
给定三条边,请你判断一下能不能组成一个三角形。
Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;
Output
对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。
Sample Input
2
1 2 3
2 2 2
Sample Output
NO
YES
代码如下
#include
#include
int main()
{
int n,i,p;
double a[100][100];
double d,b,c;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i {
for(p=0;p {
scanf("%lf",&a[i][p]);
}
d=a[i][0];b=a[i][1];c=a[i][2];
if(d+b>c && fabs(d-b) {
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
return 0;
}
这是我用数组做的当我不用数组的时候像这样
#include
#include
int main()
{
int n,i;
double a,b,c;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i {
scanf("%lf%lf%lf",&a,&b,&c);
if(a+b>c && fabs(a-b)<c)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
就对了
第一个代码提示Runtime Error(ACCESS_VIOLATION)
找不出原因 求指教谢谢了
第一个程序输入不对,应该这么写
scanf("%d",&n)
for (int i = 0; i < n; i++)
{
//每组数据的判断
scanf("%d %d %d", &a, &b, &c);
...
}
double a[100][100];占用的栈空间是100*100*8/1024=80M左右,栈直接爆炸了
一般栈的大小在1~几M,由编译器和操作系统决定
楼主你第一个代码申明了a[100][100],但你有没有想过要是测试数据n>100呢?你数组就越界了啊!
若n=101时,你的
for (p = 0; p<3; p++)
{
scanf("%lf", &a[i][p]);
}
是在向哪里输入数据呢?
然后程序就会死在这里,一直不停的等待输入数据,所以你提交代码当然会runtime error啦。
你自己可以将代码改一下,将a[100][100]改为a[1][3],然后n输入2;这样试试,你就会发现我说的问题
做复杂了,将判定写成函数;
#include<stdio.h>
void s(int a,int b,int c){
int count=0;
if (a+b>c&&a+c>b&&b+c>a)
printf("Yes\n");
else
printf("No\n");
}
int main(){
int a;
scanf("%d",&a);
int i=0;
for(i=0;i<a;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
s(a,b,c);
}
return 0;
}