题目:给出一系列的A,B型的点,然后给出几条直线,判断哪些可以完美分离这两类点。
代码:代码有有点问题,稍后修改一下吧,为啥在循环里面不能定义变量呢???
#include <stdio.h>
struct Dot//输入的点横坐标纵坐标和类型
{
int x,y;
char type;
};
struct Line//三个系数确定的直线
{
int a,b,c;
};
int main()
{
struct Dot dot[1000];
struct Line line[20];
int m,n;//n点的个数,m查询的个数
int i,j;
scanf("%d %d",&n, &m);
for(i=0;i<n;i++)
scanf("%d %d %c",&dot[i].x ,&dot[i].y, &dot[i].type );
for(i=0;i<m;i++)
scanf("%d %d %d",&line[i].a ,&line[i].b, &line[i].c);
for(i=0;i<m;i++)
{
int p;
if((line[i].a + line[i].b * dot[0].x + line[i].c * dot[0].y > 0 && dot[0].type == 'A') || (line[i].a + line[i].b * dot[0].x + line[i].c * dot[0].y < 0 && dot[0].type == 'B'))
p = 1;
else
p = 0;
//扫描n个点 ,没有这两种情况就没有完美分开1.直线上面的是A类型点或者直线下方全为B类型点 2.直线上方是B类点或者直线下方是A类点
for(j = 0; j < n; j++)
{
if(p)
{
if(!((line[i].a + line[i].b * dot[j].x + line[i].c * dot[j].y > 0 && dot[j].type == 'A') || (line[i].a + line[i].b * dot[j].x + line[i].c * dot[j].y < 0 && dot[j].type == 'B')))
{
printf("No\n");
break;
}
}
else
{
if(!((line[i].a + line[i].b * dot[j].x + line[i].c * dot[j].y > 0 && dot[j].type == 'B') || (line[i].a + line[i].b * dot[j].x + line[i].c * dot[j].y < 0 && dot[j].type == 'A')))
{
printf("No\n");
break;
}
}
}
//n个点扫描完毕 ,没有错误就完美分开了
if(j == n)
printf("Yes\n");
}
return 0;
}