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;
} 

 

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