三角形
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/32768 K (Java/Others)
Problem Description
用N个三角形最多可以把平面分成几个区域?
Input
输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后是T组测试数据,每组测试数据只包含一个正整数N(1<=N<=10000).
Output
对于每组测试数据,请输出题目中要求的结果.
Sample Input
2
1
2
Sample Output
2
8
找规律。。。
这个问题其实和n条直线可以把平面分成多少个部分是差不多一样的。
对于直线的问题,递推式是f(n)=f(n-1)+n,即从n-1条直线,变成n条直线,多了n块。
为什么就刚好是n呢?因为,一条直线可以被n-1条直线分成n段,而每一段,都恰好对应着从n-1条直线变成n条直线时会有1块变成2块,于是整体增加了n块。
所以,一个三角形能分成2个区域,两个三角形可以分成8个区域(一个三角形的一边与另一个三角形的两边相交,其实就是六芒星QAQ。六芒星本身相交出来的是6个角, 在加上中心和外部共是8个。)三个三角形的话是20个。
f(n) = 3 *2*(n - 1) + f(n - 1);
f(1) = 2;
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
int t, n;
int a[10010];
cin >> t;
a[1] = 2;
for(int i = 2; i <= 10000; i++) a[i] = 3*2*(i - 1) + a[i - 1];
while(t--){
cin >> n;
cout << a[n] << endl;
}
return 0;
}