为啥案例没问题但过不了啊

P1464 Function

鱿鱼 @ 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 的元素从来没有赋值。


|