HDU/HDOJ 1396 浙大月赛2003年

来源:互联网 发布:投诉淘宝小二判决电话 编辑:程序博客网 时间:2024/05/18 02:48

Counting Triangles

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1160    Accepted Submission(s): 573


Problem Description
Given an equilateral triangle with n the length of its side, program to count how many triangles in it.



 

Input
The length n (n <= 500) of the equilateral triangle's side, one per line.

process to the end of the file
 

Output
The number of triangles in the equilateral triangle, one per line.
 

Sample Input
123
 

Sample Output
1513
 

Author
JIANG, Jiefeng
 

Source
ZOJ Monthly, June 2003
 

我是这样思考的。

可以看出来,边长+1意味着三角形多了一行

那么可以针对多的那一行做特殊计算,因为上一次边长的三角形是没有变化的!

经过非常穷凶极恶的公式推导终于得到了最后的答案


我的代码:

#include<stdio.h>int ans[505];int cal(int n){int t1,t2,t3;t1=2*n-1;t2=(n-1)*n/2;if(n&1)t3=(n-1)*(n-3)/4;elset3=(n-2)*(n-2)/4;return t1+t2+t3;}void init(){int i;ans[1]=1;for(i=2;i<=500;i++)ans[i]=ans[i-1]+cal(i);}int main(){int n;init();while(scanf("%d",&n)!=EOF){printf("%d\n",ans[n]);}return 0;}



原创粉丝点击