hdu 1466 计算直线交点数

这篇博客介绍了如何解决HDU 1466问题,即计算最多20条直线可能的交点数量。通过定义数组a[21][200]来存储不同直线组合下的交点状态,博主阐述了交点数的计算公式,并用三重循环来判断和统计不平行直线的交点情况,最终确定所有可能的交点数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466

解题思路:
定义一个数组a[21][200],21表示最多有20条直线,200表示交点的最多个数
直线交点的最多个数很简单,就是n*(n-1)/2,20条直线最多交点数为190
当a[i][j]=1时,表示i条直线存在有j个交点的情况

当目前有n条直线时
1.有n-1条直线平行,1条不平行,有n-1个交点,且1条直线自身无交点
2.有n-2条直线平行,2条不平行,2条直线自身有0或1个交点,交点数为
(n-2)*2+0(n-2)*2+1即a[n][0]或a[n][1]
3.有n-i条直线平行,i条不平行,i条直线自身的交点情况为a[i][j](j从1到200遍历)
交点数为(n-i)*i+j,即转化为求解这i条直线自身的交点情况

由上可知,当a[i][j]=1即j条直线存在j个交点时,
n条直线中有i条直线不平行且有(n-i)*i+j 个交点的情况也存在中
故对a[n][(n-i)*i+j]赋值1
因此可设计一个三重循环,第一重为直线,第二重为不平行的直线条数,第三重为交点个数,通过判定条件确定交点是否存在
编程时应设立初值,即直线全部平行,交点为0的情况

#include <stdio.h>
#include <math.h>

int main() {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值