2301_79847011 2025-03-17 18:16 采纳率: 0%
浏览 9

uva101木块问题 仿紫书逻辑但wa

uva101木块问题 逻辑上和紫书一致但只过了样例,求debug
已尝试问ai/向紫书的写法靠拢,无果

#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;

const int n = 100010;
vector <int> q[n];//每一个q[i]是一个vector不定长数组 
int m;//m个木块m个堆

void found(int k, int &pk, int &hk)
{
    for(int i = 0; i < m; i ++)
    {
        for(int j = 0; j < q[i].size(); j ++)
        {
            if(q[i][j] == k)
            {
                pk = i;
                hk = j;
                return;
            }
        }
    }
}

void backplace(int pk, int hk)
{
    for(int i = hk+1; i < q[pk].size(); i ++)
    {
        int c = q[pk][i];
        q[c].push_back(c);
    }
    q[pk].resize(hk+1);//拿走了3以上的,剩0123,h=3+1即hk+1 
}

void puton(int pa, int ha, int pb)
{
    for(int i = ha; i < q[pa].size();i ++)
    {
        int c = q[pa][i];
        q[pb].push_back(c);
    }
    q[pa].resize(ha);//拿走了3,剩012,h=3即hk 
}

void print()
{
    for(int i = 0; i < m; i ++)
    {
        printf("%d: ", i);
        for(int j = 0; j < q[i].size(); j ++)
        {
            printf("%d ", q[i][j]);
        }
        printf("\n");
    }
}

int main()
{ 
    scanf("%d",&m);
    for(int i = 0; i < m; i ++)
    {
        q[i].push_back(i);//初始化i号块弹入i号堆 
    }
    
    //scanf 的 %s 格式符需要 char[] 类型的参数
    //直接传递 string 的地址会导致未定义行为
    string p, q;
    int a, b;

    while(cin >> p && p != "quit" && cin >> a >> q >> b)
    {
        int pa, ha, pb, hb;
        found(a, pa, ha);
        found(b, pb, hb);
        
        if(pa == pb) continue;
        if(p == "move") backplace(pa, ha);
        if(q == "onto") backplace(pb, hb);
        
        puton(pa, ha, pb);
        
    } 
    print();
    return 0;
}


  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-17 18:16
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    uva101 木块问题 仿紫书逻辑但WA

    你遇到了 UVA 101 木块问题,使用了紫书的逻辑,但却WA了。下面是我的 debug 建议:

    1. 请检查你的输入输出格式是否正确。UVA 101 的输入输出格式是:
    输入:n m
    输出:木块的数量
    
    1. 请检查你的算法是否正确。紫书的逻辑可能存在 bug,或者你可能没有正确实现。
    2. 请检查你的代码是否有语法错误。你的代码中没有语法错误,但可能存在逻辑错误。

    以下是一个简单的 debug 代码:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() {
        int n, m;
        cin >> n >> m;
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[i - j];
            }
        }
        cout << dp[n] << endl;
        return 0;
    }
    

    这个代码使用动态规划解决木块问题。如果你仍然WA,请提供更多的代码和 debug 信息,我将继续帮助你 debug。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月17日