题目链接:https://uva.onlinejudge.org/external/114/11401.pdf
题意:1~n个数里面挑3个不同的数,组成一个三角形。求方案数。
分析:
令最长的边为X,那么他能所组成的三角形个数为C(X),其余两条边是Y,Z;
但是,这并不是答案,因为里面有y=z的情况;
这里都有一个:总共有x-1-x/2 + 1 -1 个y=z;
而且,当我的y=2,z=x-1时,最后面的z=x-1,y=2也算了一遍。
于是:
然后递推求和。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 long long f[1000010]; 6 7 int main() 8 { 9 f[3] = 0; 10 for(long long x=4;x<=1000000;x++) 11 f[x] = f[x-1] + ((x-1)*(x-2)/2-(x-1)/2)/2; 12 13 int n; 14 while(cin>>n) { 15 if(n<3) break; 16 cout<<f[n]<<endl; 17 } 18 19 return 0; 20 }