本文主要是介绍ZCMU1266(数三角形)(背背记记公式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数三角形
Description
给定一个等边三角形,它的每条边被分成n等分,分别用平行于三边的直线过各个n等分点截这个三角形,如图所示:
请问,图中总共有多少个三角形?
Input
输入包含多组测试数据,直至EOF。
每组测试数据包含一个正整数n,表示三角形三边被分为了n等份(n<500)。
Output
输出三角形的个数。
Sample Input
1 2 3
Sample Output
1 5 13
一看这道题的时候就想到以前数学学过的数这种三角形的个数的公式
1.当n为偶数的时候,个数等于n*(n+2)*(2*n+1)/8;
2.当n为奇数的时候,个数等于(n+1)*(2*n*n+3*n-1)/8;
具体的推导的话就是根据分类讨论,求正三角的个数和倒三角的个数(之后有时间再补充推导过程,现在先就写下结论吧)
但我这道题也是A了很多次才通过的,有n的3次我竟然没用 long long类型,犯了个致命的错误
下面是我的关于这道题的代码
/**********************
这道题要熟练运用公式:具体见笔记
**********************/
#include<stdio.h>
#include<math.h>
int main()
{long long k,n;//k用来计数三角形的个数,n表示为被划分为了n等分。 while(scanf("%lld",&n)!=EOF){if(n%2==0)//n是偶数的情况下 {k=n*(n+2)*(2*n+1)/8;}else if(n%2==1)//n是奇数的情况下 {k=(n+1)*(2*n*n+3*n-1)/8;}printf("%lld\n",k);} return 0;
}
这篇关于ZCMU1266(数三角形)(背背记记公式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!