鱿鱼 @ 2023-02-28 20:50:29
using namespace std;
#define digui_(a,b,c) (w[a][b][c] ? w[a][b][c]:digui(a,b,c))
int w[25][25][25];
int digui(int a,int b,int c)
{
if(a<=0||b<=0||c<=0) return 1;
if(a>20||b>20||c>20) return digui_(20,20,20);
if(a<b&&b<c) return digui_(a,b,c-1)+digui_(a,b-1,c-1)-digui_(a,b-1,c);
return digui_(a-1,b,c)+digui_(a-1,b-1,c)+digui_(a-1,b,c-1)-digui_(a-1,b-1,c-1);
}
int main()
{
int a,b,c;
while(1)
{
cin>>a>>b>>c;
if(a==-1&&b==-1&&c==-1) break;
printf("w(%d,%d,%d)=%d",a,b,c,digui_(a,b,c));
}
}
by 幻想繁星 @ 2023-02-28 21:02:55
@鱿鱼 没换行
by ud2_ @ 2023-02-28 21:03:27
是滥用宏导致程序不可读而产生的错误 —— 第 18 行 w[a][b][c]
越界。C++ 中没有需要用到宏的地方。
而且 w
的元素从来没有赋值。