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
process to the end of the file
Output
The number of triangles in the equilateral triangle, one per line.
Sample Input
1 2 3
Sample Output
1 5 13
Author
JIANG, Jiefeng
Source
我是这样思考的。
可以看出来,边长+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;
else
t3=(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;
}