题目描述:
20 个圆和 2020 条直线最多能把平面分成多少个部分?
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
//思路:先用圆分割平面,再用直线分割平面
//第一条直线和第一个圆的分割都是比较特殊的,所以要单独拿出来分析
int sum(int n)
{
int ans=2;//第一个圆将平面分割为2部分
//接下来的圆都必须两两相交才能使得分割得到的平面最大
for(int i=2;i<=n;i++)//再画19个圆
{
ans+=(i-1)*2;
//
}
//第一条直线和20个圆相交,有20*2个交点,平面增加40部分
ans+=n*2;
for(int i=2;i<=n;i++)
{
ans+=2*n+i;
}
//第i条直线和前面20个圆和i-1条直线最多产生40+i-1个焦点
//被分割成40+i段,亦即增加40+i个部分
return ans;
}
int main()
{
cout<<sum(20)<<endl;
return 0;
}