本文主要是介绍Uva - 11401 - Triangle Counting(数学推导),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:从1到n的整数中选出3个数来组成一个三角形,有几种组法。
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=469&problem=2396
——>>设 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 - 11401 - Triangle Counting(数学推导)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!