直线: |
||
条数 |
最多交点数 |
平面数 |
1 |
0 |
2 |
2 |
1 |
f(1)+2 |
3 |
2 |
f(2)+3 |
4 |
3 |
f(3)+4 |
n |
n-1(该条数的直线前面的直线总条数) |
f(n-1)+增加的平面数=f(n-1)++(交点数+1)=f(n-1)+((n-1)+1) |
平行线: |
|||
对数 |
条数 |
最多交点数 |
平面数 |
1 |
2 |
0 |
3 |
2 |
4 |
4=2*2 |
f(1)+6=f(1)+3*2 |
3 |
6 |
8=4*2 |
f(2)+10=f(2)+5*2 |
4 |
8 |
12=6*2 |
f(3)+14=f(3)+7*2 |
n |
2*n |
单条直线交点数*2=该对平行线前的直线总条数*2=(2*(n-1))*2 |
f(n-1)+单条直线增加的平面数*2=f(n-1)+(交点数+1)*2=f(n-1)+(2*(n-1)+1)*2 |
折线: |
|||
折线数 |
所含直线数 |
最多交点数 |
平面数 |
1 |
2 |
0 |
2 |
2 |
4 |
4=2*2 |
f(1)+5=f(1)+(2*3-1) |
3 |
6 |
8=4*2 |
f(2)+9=f(2)+(2*5-1) |
4 |
8 |
12=6*2 |
f(3)+13=f(3)+(2*7-1) |
n |
2*n |
单条直线交点数*2=该对平行线前的直线总条数*2=(2*(n-1))*2 |
f(n-1)+(单条直线增加的平面数*2-1)=f(n-1)+((交点数+1)*2-1)=f(n-1)+((2*(n-1)+1)*2-1) |
三角形 |
|||
个数 |
交点数 |
增加的平面个数 |
分割平面总数 |
1 |
0 |
1 |
2 |
2 |
2*3 |
3*3-3 |
f(1)+3*3-3 |
3 |
4*3 |
5*3-3 |
f(2)+5*3-3 |
4 |
6*3 |
7*3-3 |
f(3)+7*3-3 |
n |
(n*2-2)*3 |
(2*n-1)*3-3 |
f(n-1)+(2*n-1)*3-3=f(n-1)+6*(n-1) |
代码:
//算法:递推
//f(n)=f(n-1)+((2*(n-1)+1)*2-1)
1 #include<stdio.h> 2 int main() 3 { 4 __int64 a[10010]; 5 int i; 6 a[1]=2;a[2]=7; 7 for(i=3;i<10001;i++) 8 a[i]=a[i-1]+((2*(i-1)+1)*2-1); 9 int n; 10 scanf("%d",&n); 11 while(n--) 12 { 13 int k; 14 scanf("%d",&k); 15 printf("%I64d ",a[k]); 16 } 17 return 0; 18 }