https://vjudge.net/problem/UVA-11401
题意:从1到n中选出三个数使得它们能组成一个三角形的方案数。
题解。枚举三角形最大的那条边,然后通过观察你会发现当你枚举第二大的边时,会形成一个等差数列,首项为 i-3,公差为2,
所以就枚举三角形的最大的边就行了
代码:
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll c(ll n)
{
ll a1=n%2;
ll cnt=(n-a1)/2+1;
return cnt*(a1+n)/2;
}
int main(){
ll ans,n;
while(~scanf("%lld",&n)&&n)
{
ans=0;
for(ll i=n;i>=4;i--)
{
ans+=c(i-3);
}
printf("%lld\n",ans);
}
return 0;
}