UVA 477
这题跟476差别不多,只多一个存储圆形,计算点到圆心的距离并和半径比较,判断是否在圆内
#include<stdio.h>//思路跟476基本一样,而且本题代码可以解476,不同之处在于本题要多一个结构体储存circle #include<string.h> #include<stdlib.h> #include<math.h> struct rec{ int f; double x1,y1,x2,y2; }; struct cir{ int f; double r,x,y; }; int main() { struct rec r[20]; struct cir c[20]; int i=0,lenr=0,j=1,k,flag,lenc=0; double x[10000],y[10000],temp; char str[5]; for(k=0;k<20;k++) r[k].f=c[k].f=0; while(scanf("%s",str),strcmp(str,"*")) { if(strcmp(str,"r")==0)//这个储存rectangle的descriptions { scanf("%lf%lf%lf%lf",&r[lenr].x1,&r[lenr].y1,&r[lenr].x2,&r[lenr].y2); if(r[lenr].y1>r[lenr].y2) { temp=r[lenr].y1; r[lenr].y1=r[lenr].y2; r[lenr].y2=temp; } if(r[lenr].x1>r[lenr].x2) { temp=r[lenr].x1; r[lenr].x1=r[lenr].x2; r[lenr].x2=temp; } r[lenr].f=j; lenr++; } else { scanf("%lf%lf%lf",&c[lenc].x,&c[lenc].y,&c[lenc].r); c[lenc].f=j; lenc++;//接收circle 的descriptions } j++;//j是给图形编号 } while(scanf("%lf%lf",&x[i],&y[i]),(x[i]!=9999.9)||(y[i]!=9999.9)) i++; for(j=0;j<i;j++) { flag=0; for(k=0;k<lenr;k++) { if((x[j]>r[k].x1)&&(x[j]<r[k].x2)&&(y[j]>r[k].y1)&&(y[j]<r[k].y2)) { printf("Point %d is contained in figure %d\n",j+1,r[k].f); flag=1; } } for(k=0;k<lenc;k++) { if(sqrt(pow((c[k].x-x[j]),2)+pow((c[k].y-y[j]),2))<c[k].r) { printf("Point %d is contained in figure %d\n",j+1,c[k].f); flag=1; } } if(flag==0) printf("Point %d is not contained in any figure\n",j+1); }//类似476,依次判断并输出 system("pause"); return 0; }