题意:从1到n的整数中选出3个数来组成一个三角形,有几种组法。
——>>设 x + y > z,
则 x > z - y;
故z - y < x < z;
对y进行枚举,接着看x有几种选法。
除掉等腰三角形,减掉重复计算的一半。
#include <iostream>
using namespace std;
const int maxn = 1000000 + 10;
long long f[maxn];
int main()
{
int n;
f[3] = 0;
for(long long i = 4; i < maxn; i++)
f[i] = f[i-1] + ((i-1)*(i-2)/2 - (i-1-i/2))/2;
while(cin>>n)
{
if(n < 3) return 0;
cout<<f[n]<<endl;
}
return 0;
}
发现,用printf("%I64d\n", f[n]);来输出WA无数次!!!!!!!!!!!!!!!!!!!!!!!!!!
下午,在师兄的指导下,OK,原来在Uva上若用64位整数的话,不可以用%I64d,而是要用%lld,这事……