zoukankan      html  css  js  c++  java
  • 折线分割平面(递推+数学)

    我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示:
    这里写图片描述
    Input

    输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
    

    Output

    对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
    

    Sample Input

    2
    1
    2
    

    Sample Output

    2
    7
    

    思路:直线分割平面时增加第n条直线的时候跟之前的直线最多有n-1个交点,此时多出了(n-1)+1个部分。
    折线也是同理,f(1)=2,f(2)=7,先画好前面n-1条折线,当增加第n条折线时与图形新的交点最多有2*2(n-1)个,所以分出的部分多出了2*2(n-1)+1个,所以推出f(n)=f(n-1)+4*(n-1)+1,n>=3。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int board[10005];
    
    void Build(){
        board[1] = 2;
        board[2] = 7;
        for(int i=3 ; i<=10000 ; i++){
            board[i] = board[i-1] + 2*2*(i-1)+1;
        }
    }
    
    int main(){
    
        Build();
    
        int T;
        scanf("%d",&T);
        while(T--){
            int mid;
            scanf("%d",&mid);
            printf("%d
    ",board[mid]);
        }
    
        return 0;
    }
  • 相关阅读:
    数据库表关联分析
    java异常信息分析
    版本问题
    项目
    EXCEL工具
    项目安全
    服务器环境
    vue公共
    Linux 文件权限
    nginx
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514185.html
Copyright © 2011-2022 走看看