B-递推

QAQ这一次做数学题,某种程度上容易好多,因为题目容易看懂了,至少这一道做起来很有思路,最开始做的是时候还是错的,我看了数据就以为是2的2n-1次方,但是其实是2+3n(n-1);然后套公式,解决输入输出格式就行。

最后贴一下网上一个思路:

平面本身是1部分.一个三角形将平面分成三角形内、外2部分,即增加了1部分, 两个三角形不相交时将平面分成3部分,相交时,交点越多分成的部分越多(见下图); 由上图看出,新增加的部分数与增加的交点数相同,所以,再画第3个三角形时,应使每条边的交点尽量多; 对于每个三角形,因为1条直线最多与三角形的两条边相交,所以第3个三角形的每条边最多与前面2个三角形的各两条边相交,共可产生3×(2×2)=12(个)交点,即增加12部分; 因此,3个三角形最多可以把平面分成:1+1+6+12=20(部分); 由上面的分析,当画第n(n≥2)个三角形时,每条边最多与前面已画的(n-1)个三角形的各两条边相交, 共可产生交点:3×[(n-l)×2]=6(n-1)(个),能新增加6(n-1)部分, 因为1个三角形时有2部分,所以n个三角形最多将平面分成的部分数是: 2+6×[1+2+…+(n-1)]=2+6× n(n-1) 2 =2+3n(n-1), 当n=10时,可分成:2+3×10×(10-1)=272(部分). 答:3个三角形最多可以把平面分成20部分,10个三角形最多可以把平面分成272部分.

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        long m,k=1;
        cin>>m;
        k=2+3*m*(m-1);
        cout<<k<<endl;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/yintoki/p/5723859.html