https://www.luogu.com.cn/problem/P2807

題目背景

三角形計數(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;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章