三角形计数

编程入门 行业动态 更新时间:2024-10-09 00:51:12

三<a href=https://www.elefans.com/category/jswz/34/1769024.html style=角形计数"/>

三角形计数

三角形计数

题目描述

    快码佳编四兄弟姐妹来到了明代,这天他们看到一个很有学术风范的老者在地上画着东西,一打听,原来是
著名的数学家徐光启。徐光启在数学方面的最大贡献当推《几何原本》(前6卷)翻译。徐光启提出了实用的“度数
之学“的思想,同时还撰写了《勾股义》和《测量异同》两书。他们看到徐先生在地上画着好多三角形。把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三
角形呢?编程来解决这个问题

 

输入

 第一行为整数t(≤100),表示测试数据组数;接下来t行,每行一个正整数n(≤500)。

 

输出

 对于每个n,输出一个正整数,表示三角形个数

 

样例输入

3
1
2
3

 

样例输出

1
5
13

题解:

这道题一眼望去就觉得是一道要找规律的题,所以直接暴力打表,表如下

 


  1        |         2         |        3         |        4        |         5          |       6         |        7        |         8        |         9

——————————————————————————————————————————————

  1        |         5         |        13       |       27       |       48         |      78        |      118       |       170       |      235

 


通过分析表我们看不出什么,那么我们看他们的差,4,8,14,21,30,40,52,65,觉得有些规律,再做差,4,6,7,9,10,12,13,感觉快出来了,再做差,2,1,2,1,2,1,好,规律找出来了我们可预先计算出最后一组数组,在从后往前推,直至推到初始数列即可,再在询问时O(1)输出即可;时间:0ms。

源代码:

#include<bits/stdc++.h>
using namespace std;
long long a1[600],a2[600],a3[600],a4[600],t,n;
int main(){memset(a1,0,sizeof(a1));memset(a2,0,sizeof(a2));memset(a3,0,sizeof(a3));memset(a4,0,sizeof(a4));a3[1]=a2[1]=4,a4[1]=1;for(int i=1;i<=499;i+=2) a1[i]=2,a1[i+1]=1;for(int i=2;i<=500;i++) a2[i]=a2[i-1]+a1[i-1];for(int i=2;i<=500;i++) a3[i]=a3[i-1]+a2[i-1];for(int i=2;i<=500;i++) a4[i]=a4[i-1]+a3[i-1];scanf("%lld",&t);while(t--){scanf("%lld",&n);printf("%lld\n",a4[n]);}return 0;
}

AC

更多推荐

三角形计数

本文发布于:2024-02-13 21:08:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760560.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:角形

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!