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

46 篇文章 2 订阅
35 篇文章 0 订阅

题目背景

三角形计数(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;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值