題目背景
三角形計數(triangle) 遞推
題目描述
把大三角形的每條邊n等分,將對應的等分點連接起來(連接線分別平行於三條邊),這樣一共會有多少三角形呢?編程來解決這個問題。
輸入格式
第一行爲整數t(≤100),表示測試數據組數;接下來t行,每行一個正整數n(≤500)。
輸出格式
對於每個n,輸出一個正整數,表示三角形個數。
輸入輸出樣例
輸入 #1複製
3 1 2 3
輸出 #1複製
1 5 13
說明/提示
n(≤500)
t(≤100)
【題目分析】 這個題目由背景可知是一個遞推的題,那麼我們需要思考如何遞推,我們可以將三角形看成一個邊長爲n的三角形,那麼最小的三角形爲邊長爲1,依次增加。
如上圖所示三角形被分爲了向上的和向下的三角形
向上的三角形的個數:邊長爲1:1+2+3+4 邊長爲2:1+2+3..依次類推
向下的三角形的個數: 邊長爲1:1+2+3,邊長爲2:1
大家可以仔細觀察整個個數的關係
【代碼實現】
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL f[510];
LL t[510];
int main()
{
f[1]=1,f[2]=4;
for(int i=3;i<=500;i++)//往上的三角形
f[i]=f[i-1]+(1+i)*i/2;
t[1]=0,t[2]=1;
for(int i=3;i<=500;i++)//往下的三角形
t[i]=t[i-2]+(i)*(i-1)/2;
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
cout<<f[x]+t[x]<<endl;
}
return 0;
}