正文

stu(1059)2005-08-30 20:16:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/4271.html

分享到:

#include"iostream.h"
void print(int *data,int n)
{
    int i;
    int a,b;
    
        
        //-----判断前面有没有相同的点,如果有,则从第二个起将所有的点前移,并将点的总数n减1-----
        while(data[2]==data[0]&&data[3]==data[1])
    {
        for(i=0;i<2*n-2;i++)    data[i]=data[i+2];     //前移        
        n--;                                   //总数减1
    }
    
        //-----如果不相同的点只有小于或等于2个,则输出“YES”-----
        if(n<=2)    {cout<<"YES"<<endl;    return;}
    
        
        //-----如果第一个点的横坐标跟第二个点的横坐标相等,则直接判断其它(n-2)个点的横坐标是否也跟它们相等-----
        if(data[2]==data[0])
    {
        //-----将其它(n-2)个点的横坐标与其进行比较-----
                for(i=0;i<n-2;i++)    
             if(data[2*i+4]!=data[2])    
              {cout<<"NO"<<endl;return;}
        
                //-----如果都相等,则输出“YES”-----
                cout<<"YES"<<endl;
        
                return;
    }
    
        //-----如果第一个点的纵坐标跟第二个点的纵坐标相等,则直接判断其它(n-2)个点的纵坐标是否也跟它们相等-----
        if(data[3]==data[1])
    {
        
                //-----将其它(n-2)个点的纵坐标与其进行比较-----
                for(i=0;i<n-2;i++)    
             if(data[2*i+5]!=data[1])    
              {cout<<"NO"<<endl;return;}
        
                //-----如果都相等,则输出“YES”-----
                cout<<"YES"<<endl;
        
                return;
    }
    
        
        //-----一般情况下作如下处理-----
        a=data[3]-data[1];b=data[2]-data[0];
        
        //-----利用斜率进行比较-----
        for(i=0;i<n-2;i++)
             if(a*(data[2*i+4]-data[0])!=b*(data[2*i+5]-data[1]))    
                  {cout<<"NO"<<endl;return;}
    
        cout<<"YES"<<endl;
}
int main()
{
    int i,n;
    int data[300];
    
        while(cin>>n)
    {
        for(i=0;i<2*n;i++)
             cin>>data[i];
        print(data,n);
    }
    
        return 1;
}

阅读(2551) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册