收藏 分销(赏)

计算直线的交点数 1466.doc

上传人:s4****5z 文档编号:8895455 上传时间:2025-03-07 格式:DOC 页数:3 大小:20KB 下载积分:10 金币
下载 相关 举报
计算直线的交点数 1466.doc_第1页
第1页 / 共3页
计算直线的交点数 1466.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
计算直线的交点数 1466 Problem Description 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。 Input 输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量. Output 每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。 Sample Input 2 3 Sample Output 0 1 0 2 3 Author lcy Source ACM暑期集训队练习赛(九) 分析: 将n 条直线排成一个序列,直线2和直线1最多只有一个交点,直线3和直线1,2最多有两个交点, 。。。。。。,直线n 和其他n-1条直线最多有n-1个交点。由此得出n条直线互不平行且无三线共 点的最多交点数: Max = 1 +2 +。。。。(n-1)=n(n-1)/2; 但本题不这么简单,这些直线有多少种不同的交点数? 容易列举出i=1,2,3的情况如下图所示,来分析n=4的情况: 1. 四条直线全部平行,无交点 2. 其中三条平行,交点数: (n-1)*1 +0=3; 3. 其中两条平行,而另外两条直线的交点既可能平行也可能相交,因此交点数据分别为: (n-2)*2+0=4 (n-2)*2 +1=5 4. 四条直线互不平行, 交点数为(n-3)*3+3条直线的相交情况: (n-3)*3+0=3 (n-3)*3+2=5 (n-3)*3+3=6 即n=4时,有0, 3, 4, 5, 6个不同的交点数.所有有5种可能 从上述n=4的分析过程中,发现: M条直线的交点方案数=(m-r)条平行线与r条直线交叉的交点数+r条直线本身的交点方案=(m-r)*r +r条直线之间的交点数。 #include<stdio.h> #include<string.h> const int MAXN=305; int main() { int n,i,j,k; int line[30][MAXN]; memset(line[1], 0, sizeof(line[1])); line[1][0]=1; for (i=2; i<=20; i++) //计算当直线个数为i时的交点情况 { memset(line[i], 0, sizeof(line[i])); line[i][0]=1; //无论有几条直线,都会存在交点个数为0的这种情况 for (j=1; j<i; j++) //对i条直线进行划分 { for (k=0; k<MAXN; k++) //计算该种划分情况下,交点的个数 { if (line[j][k]==1) { line[i][(i-j)*j+k]=1; //line[i][(i-j)*j+k]=1表示存在交点个数为(i-j)*j+k } } } } while (scanf("%d", &n)!=EOF) { for (i=0; i<MAXN; i++) { if (i==0) printf("0"); else if(line[n][i]==1) printf(" %d", i); } printf("\n"); } return 0; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服