codeup2595 封闭曲线分割平面
时空限制 1000ms/128MB
题目描述
设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。
输入
对每一笔测资,输入只有一行:整数n (0<n<1000)
输出
一行:一个整数
样例输入
1
3
10
30
500
样例输出
2
8
92
872
249502
分析
当n-1个圆时,区域数为f(n-1)
那么第n个圆就必须与前n-1个圆相交,则第n个圆被分为2(n-1)段线段,增加了2(n-1)个区域。
故: f(n)=f(n-1)+2(n-1) // 递推公式
......
=f(1)+2+4+……+2(n-1)
=2+2*(1+2+...+n-1)
=n^2-n+2 // 递推公式
代码
#include<iostream>
using namespace std;
const int N = 1005;
int a[N];
int main(){
int n;
a[1]=2;
for (int i=2; i<=1000; i++)
a[i]=a[i-1]+2*(i-1);
while (cin>>n)
cout<<a[n]<<endl;
return 0;
}