博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM——1086,You can Solve a Geometry Problem too(思维)
阅读量:4049 次
发布时间:2019-05-25

本文共 883 字,大约阅读时间需要 2 分钟。

突破口:求两线段是否有交点,只要求出两线段所在直线之间的交点(x,y),问x1<=x<=x1’&&x2<=x<=x2’即可。

代码如下:

#include
#include
#include
#include
using namespace std;struct segent //线段两端点的坐标{ double x1,y1,x2,y2;}s[105];double k[105],b[105]; //y=kx+b,记录每条线段所在直线的斜率还有截距int main(){ int n,i,j,cnt; double x1,y1,x2,y2; double x; while(~scanf("%d",&n)&&n) { cnt=0; for(i=0;i<=n-1;i++) { scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); if(x1>x2) //始终保证x1<=x2,即(x1,y1)始终为线段的左端点 { swap(x1,x2); swap(y1,y2); } s[i].x1=x1;s[i].y1=y1;s[i].x2=x2;s[i].y2=y2; k[i]=(s[i].y1-s[i].y2)/(s[i].x1-s[i].x2); b[i]=s[i].y1-k[i]*s[i].x1; } for(i=0;i<=n-1;i++) { for(j=i+1;j<=n-1;j++) { if(k[i]!=k[j]) //不平行,两直线必有交点 { x=(b[j]-b[i])/(k[i]-k[j]); //求出交点横坐标 if(x>=s[i].x1&&x<=s[i].x2&&x>=s[j].x1&&x<=s[j].x2) cnt++; } } } printf("%d\n",cnt); } return 0;}

转载地址:http://dbdci.baihongyu.com/

你可能感兴趣的文章
模拟屏学习资料_电视标准:PAL和NTSC
查看>>
模拟屏学习资料_电视标准:接收制式
查看>>
模拟屏学习资料_什么是PAL制式
查看>>
模拟屏学习资料_模拟视频 入门
查看>>
模拟屏学习资料_缩写补充(1)
查看>>
关于字符串逆序的问题
查看>>
嵌入式及手机开发[笔试题目]
查看>>
Sony Ericsson Z610i
查看>>
MTK的暗码
查看>>
LCD的接口分类
查看>>
LCD点屏心得
查看>>
可重入函数
查看>>
C语言嵌入式系统编程修炼之道
查看>>
linux内核驱动开发笔试题
查看>>
XX公司招聘C笔试题
查看>>
×××公司linux内核驱动开发招聘笔试题
查看>>
驱动版Hello World
查看>>
sizeof,终极无惑(上)
查看>>
常考--宏与内联函数
查看>>
C语言面试题大汇总
查看>>