Triangle Counting
You are given n rods of length 1, 2…, n. You have to pick any 3 of them & build a triangle. How many distinct triangles can you make? Note that, two triangles will be considered different if they have at least 1 pair of arms with different length.
Input
The input for each case will have only a single positive integer n (3<=n<=1000000). The end of input will be indicated by a case with n<3. This case should not be processed.
Output
For each test case, print the number of distinct triangles you can make.
Sample Input
5
8
0
Output for Sample Input
3
22
题意叫我们输入一个正整数n(3<=n<=1000000),n为零时结束运行,让我们求出1~n这些数字中不重复取出3个能组合成三角形的个数。把n从4开始列一下能发现规律:(n=4是有4 3 2;n=5时有5 4 {3,2} ;n=6时有 6 5 {4,3,2}, 6 4 {3}…)可以列出如下,再根据等差数列推得n为奇偶数时对应个数的不同公式。注意long long 输出。
4: 1
5: 2
6: 3 1
7: 4 2
8: 5 3 1
9: 6 4 2
10: 7 5 3 1
#include<stdio.h>
long long ans[1000001];
int main()
{
long long n;
ans[4]=1;
for(long long i=5; i<=1000000; i++)
{
if(i%2)//奇数
ans[i]=ans[i-1]+(i-1)/2*(i-3)/2;//用等差数列公式推得
else//偶数
ans[i]=ans[i-1]+(i-2)/2*(i-2)/2;//同上
}
while(scanf("%lld", &n)!=EOF&&n>2)
{
printf("%lld\n", ans[n]);
}
return 0;
}