Question:
You are given n rods of length 1, 2, … , n. You have to pick any 3 of them and 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
Sample Output
3
22
设三条边为x,y,z;最长边为x; x-z<y<x; 先开始的时候想着z=1的时候,z=2的时候,把图画出来是两条平行线。。。。。一脸懵逼,过了一会才明白这是具体的值。z=2时,y=x-1;有1个值,以此类推0,1,2,3,x-2; (x-1)(x-2)/2.这时候肯定有y=z的时候
在(x/2+1,x-1)的时候有重复把他的值/2;因为此时还要分奇偶,就把结果直接用(x-1)/2表示,就可以得出结论。
#include<stdio.h>
#include<iostream>
#define ll long long
#define maxn 1000000+5
using namespace std;
ll a[maxn];
/*int fun()
{
a[1]=0;
a[2]=0;
a[3]=0;
for(ll i=4;i<1000005;i++)
{
a[i]=a[i-1]+((i-2)*(i-1)/2-(i-1)/2)/2;
}
return 0;
}*/
int main()
{
ll n;
a[3]=0;
for(ll i=4;i<1000005;i++)
{
a[i]=a[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2;
}
while(~scanf("%lld",&n))
{
if(n<3) break;
// fun();
//fun(n);
printf("%lld\n",a[n]);
}
return 0;
}