您的位置:首页 > 其它

1657 圆的划分问题

2015-12-06 18:58 281 查看
Description

在一个无限延伸平面上有一个圆和n条直线,这些直线中每一条都在一个圆内,并且同其他所有的直线相交,假设没有3条直线相交于一点,试问这些直线最多将圆分成多少区域。

Input

第一行包含一个整数T,(0< T<=100)表示测试次数。

每组测试数据包含一个整数N(0<=N<=10000000),表示直线的条数。

Output

对于每一组测试数据,输出这个圆能被这N条直线分成的最多区域数。

Sample Input

Raw

2

1

2

Sample Output

Raw

2

4

题解:

令hn表示这n条直线将圆内分割成的区域块数。

因为第n条直线和原先的n-1条直线在圆内各有一交点,所以它被切成n条线段。而每条线段可将原来已形成的每个区域分成两块,所以有

hn=hn-1+n h0=1

由这个递推关系,有

hn-1=hn-2+n-1

将这两个关系式两端相减,得

hn-2hn-1+hn-2=1

再由这个递推关系,又有

hn-1-2hn-2+hn-3=1

将其与上式相减,得

hn-3hn-1+3hn-2-hn-3=0

利用h0=1,h1=2,h2=4,解这个齐次递推关系,得 hn=1+(n+1)*n/2

代码:

#include<cstdio>
int main()
{
long long t,n,a;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
if(n==0)
{
printf("1\n");continue;
}
a=1+n*(n+1)/2;
printf("%lld\n",a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: