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;
}