UVA 477

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=418

这题跟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;
}

  

posted @ 2013-02-18 15:24  执着追求的IT小小鸟  阅读(303)  评论(0编辑  收藏  举报