HDU- 2050 - 折线分割平面-寻找数学规律,用递推的思想求解

Hdu 2050 折线分割平面

题目

Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
在这里插入图片描述

Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。

Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行

Sample Input
2
1
2

Sample Output
2
7

分析

① 首先题意中的折线是由两根线段组成的,只不过只有一段是无限伸长的,所以我们可以通过求出直线分割平面f(n)函数从而推导出折线的递推公式。
② 直线分割平面:
1条直线可以将1个平面划分为2个平面,两条直线的情况下只有相交才能分割出最大的平面数,即为4个平面,此时交点数为1,以此类推,可以发现,当画第n条直线时,它可以与前面n-1条直线形成n-1个交点,可以使平面数多出(n-1)+1=n。
如图:
https://www.cnblogs.com/cafu-chino/p/10139083.html
通过拆分可得

n=1 ··· ··· 2=1+1;

n=2 ··· ··· 4=1+1+2;

n=3 ··· ··· 7=1+1+2+3;

n=4 ··· ··· 11=1+1+2+3+4;

n=5 ··· ··· 15=1+1+2+3+4+5;

可以得出直线分割平面递推公式,f(n)=f(n-1)+新增交点个数+1;f(n) = f(n-1)+n;

③ 折线分割平面:
通过题意可知,每新增一条折线,就相当于多出两条起点一样终点不同的射线,所以可以推出每多一条折线,就会多4*(n-1)个交点,根据直线分割平面交点与平面的关系可知:每多一条折线,就会多出4*(n-1)+1个平面;由此,推出折线分割平面的递推式:f [n] = f [n-1] +4*(n-1)+1
④得到递推式了,代码就不难写出了,这里采用打表的方法求出最终结果。

代码

#include <stdio.h>
int main() {
	int c,i;
	scanf("%d",&c);
	long long a[10000]={1,2,7};
	for(i=3;i<=10000;i++){
		a[i]=a[i-1] + 4*(i-1)+1;		//每新增一条折线,就多4*(n-1)个交点, 那么就多(交点数)+1个平面 
	}
	while(c--){
		int n;
		scanf("%d",&n);
		printf("%d\n", a[n]);
	}
	return 0;
}

图片来源:https://www.cnblogs.com/cafu-chino/p/10139083.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值