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
代码:
在一个无限延伸平面上有一个圆和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; }
相关文章推荐
- 至Android虚拟机发送短信和拨打电话
- 自定义View 实现软键盘实现搜索
- BC 65 game
- ubuntu(虚拟机)中使用minicom
- ubuntu(虚拟机)中使用minicom
- js返回,页面暂存
- linux上安装mono发布.net网站步骤
- Redis高级进阶(二)
- (转)No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VA 解决办法
- Python基础04 运算
- Python基础03 序列
- mysql安装及主从
- 验证登录页面
- Python基础 基本数据类型
- 读《50 Android Hacks》笔记整理Hack 24~Hack 30
- Node.js开发环境搭建
- 直接插入排序
- linux内核参数注释与优化 【转】
- Asoc dapm(五) - dapm widget链表更新
- Linux学习笔记(1)-嵌入式Linux概念