要求求出周长为n的不同的三角个数。。
如果三条边互不相等时,则个数再加1。(x,y,z; x,z,y;)
假设三角形边长为x,y,z,已知z,则有x+y=n-z,x-y<z,令x-y=t,(0<=t<z),求解得 x=(n-z+t)/2,y=(n-z-t)/2,对于y,ymax=(n-z)/2,ymin=(n-z-(z-1))/2.。。。
看别人的代码的出的理解。。还是怪怪的,希望大神能指点下~!!!!
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
int max(int a,int b)
{
if(a>b)return a;
return b;
}
int main()
{
int num,n,t,s,x,j,z,temp;
cin>>t;
while(t--)
{
cin>>num>>n;
s=0;
for(z=1;z<=n/3;z++)
{
temp=0;
x=(n-z)/2;
j=max(z,n/2-z+1);
if(x+z<=n-z-x||x>n-z-x)continue;
if(j==z)
{
temp=z;
s--;
}
if(temp!=x&&x==n-z-x)s--;
s+=(x-j+1)*2;
//cout<<z<<" "<<x<<" "<<j<<" "<<temp<<" "<<s<<endl;
}
cout<<num<<" "<<s<<endl;
}
return 0;
}