原题目:
可算是写完了这几道基础的递推题目,这道折线的题目比看起来要简单不少。
主要思路:
只要抓住以的规律就好,为了方便说明,我们记第N次加入的折线的两个边为A,B。
为了让分割产生的区域数最多,需要让A,B分别和之前的N-1个折线的2*(N-1)条边都相交,因此这部分多出来的区域就是2*2*(N-1),同时由于A,B在一端是闭合的,这里也会多1个区域.
因此递推表达式为:
f(N)=f(N-1) + 2*2*(N-1) + 1
源代码:
#include <iostream>
using namespace std;
int main()
{
unsigned long long int c;
unsigned long long int result[10050];
unsigned int input[3000];
result[1] = 2;
result[2] = 7;
for(int i = 3; i < 10050; i++)
{
result[i] = result[i-1] + 2*2*(i-1) + 1;
}
scanf("%llu",&c);
for(int i = 0;i < c; i++)
{
scanf("%llu",&input[i]);
}
for(int i = 0;i < c; i++)
{
printf("%llu\n",result[input[i]]);
}
return 0;
}