在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域。
/* 思路: n=1时有两个平面 这时让n=2,多一条直线,这条直线最多与n-1条直线也就是1个直线相交 相交后有n-1个交点,那么这条新直线最多接触到n个平面 这n个平面都被一分为二,产生了n个新平面,所以f[i]=f[i-1]+i 举例: 当n=2时有2条直线4个平面 这时加入第三条,他最多与n=2每个直线相交一次 然后最多接触到3个平面 接触到的平面都被一分为二 所以f[3]=f[2]+2 */ //本题代码只考虑一组数据 #include<bits/stdc++.h> #define ll long long const ll maxn=100; using namespace std; ll f[maxn]={0}; int main() { ll n; cin>>n; f[1]=2; for(ll i=2;i<=n;i++) f[i]=f[i-1]+i; cout<<f[n]<<endl; //可以把for循环改成等差数列前n项和求和, //f[1]=2 //f[2]=2+2 //f[3]=2+2+3 //f[4]=2+2+3+4 //那么f[n]=2+(2+3+4+5+....+n) // =2+(-1)+(n*(n+1))/2 }