题意:从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,这事……
本文介绍了UVA 10764问题的解决思路,利用枚举方法计算从1到n能组成的三角形数量,并提供了一段C++代码实现。注意在使用64位整数输出时,Uva平台需采用%lld而非%I64d。
377

被折叠的 条评论
为什么被折叠?



