最大区域数的计算公式推导如下:
每新增一个点,它与之前的所有点连线
每条新线与所有已有线相交,新增区域
最终区域数为组合数公式:f(n) = C(n,4) + C(n,2) + 1
其中C(n, k)表示组合数"n选k"。
C(n,4):四个点确定的交点数量
C(n,2):每条弦的基本分割
+1:初始的圆形区域
展开后得到:
f(n) = (n⁴ - 6n³ + 23n² - 18n + 24)/24
这个公式可以正确计算圆形被n个点两两连线分割的最大区域数。
#include<bits/stdc++.h>
using namespace std;
long long int fun(long long int n)
{
	return (n*n*n*n-6*n*n*n+23*n*n-18*n+24)/24;
}
int main()
{
	long long int n;
	while(cin>>n)
	{
		cout<<fun(n)<<endl;
	}
}