摘自:http://blog.csdn.net/xia842655187/article/details/47043361
原题:
Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/f38a5cb2aa4e9b9d447d934a7c1b24e7.jpeg)
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2 1 2
Sample Output
2 7
思路:
很明显,这属于一道递推题。
我们可以看到,随着折线数量的增加,交点的数量也有所增加。
交点数量的增加与分割区域的增加有一定关系。
一条直线与n条直线之间可以有n条交点
一条折线与n条直线之间可以有2n条交点
一条折线与n条折线之间可以有2*2n条交点
所以新增的折线可以有2*2n条交点。每两个相邻交点之间可以分割一个区域,所以增加的新区域为交点数量-1。
f(1)=2;
所以就有f(n) = f(n-1) + 4 * (n-1) - 1 + 2;
化简为 f(n) = f(n-1) + 4 * n - 3;
我的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner kb=new Scanner(System.in);
while(kb.hasNext()){
int c=kb.nextInt();
long[] arr=new long[10050];
arr[1]=2;
for(int j=2;j<10001;j++){
arr[j]=arr[j-1]+4*j-3;
}
for(int i=0;i<c;i++){
int n=kb.nextInt();
System.out.println(arr[n]);
}
}
}
}