//订正一个低级错误
//第二道题的编程(代码已优化,速度加快了)
#include <stdio.h>
long fun(int a,int b,int c)
{ if(a==0&&b==0&&c==0)
//原先if(a*b*c==0)是错误的,导致n取奇数时居然也有“解”
return 1;
else if(a<0||b<0||c<0)
return 0;
else if(a==b&&b==c)
return 2*fun(a-2,b-1,c-1)+fun(a-2,b-2,c-2);
else if(a<b&&b==c)
return fun(a,b-1,c-1)+fun(a-2,b-2,c-2);
else return 0;
}
main( )
{
int n;
while(1){
scanf("%d",&n);
if(n<0)break;
printf("%ld\n",fun(n,n,n));}
}
偶的英语太烂,不堪出题大任。但仍谢谢斑竹。
//第二道题的编程(代码已优化,速度加快了)
#include <stdio.h>
long fun(int a,int b,int c)
{ if(a==0&&b==0&&c==0)
//原先if(a*b*c==0)是错误的,导致n取奇数时居然也有“解”
return 1;
else if(a<0||b<0||c<0)
return 0;
else if(a==b&&b==c)
return 2*fun(a-2,b-1,c-1)+fun(a-2,b-2,c-2);
else if(a<b&&b==c)
return fun(a,b-1,c-1)+fun(a-2,b-2,c-2);
else return 0;
}
main( )
{
int n;
while(1){
scanf("%d",&n);
if(n<0)break;
printf("%ld\n",fun(n,n,n));}
}
偶的英语太烂,不堪出题大任。但仍谢谢斑竹。