三角形
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;
}
博客围绕用N个三角形最多可把平面分成几个区域的问题展开。给出输入输出示例,通过与n条直线划分平面问题类比找规律,得出一个三角形分2个区域,两个分8个,三个分20个,还给出递推公式f(n) = 3 *2*(n - 1) + f(n - 1),f(1) = 2。
540

被折叠的 条评论
为什么被折叠?



