请教各位大神我的代码错在哪里?

用哈弗曼树对字符串(可能包括空格)编码,返回压缩后占用的最小位数,OJ显示答案错误。

自己尝试了一些例子,在字符串长度不是非常长的时候,输出数值是没有问题的。然后当字符串长度为好几百时会有问题。

代码如下,请教各位我的代码错在哪里,是哪里的思路出现了问题?

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string input;
    getline(cin, input);
    int length = (int)input.length();
    int freq[256];
    for (int i = 0; i < 256; i++) freq[i] = 0;
    for (int i = 0; i < length; i++) freq[int(input[i]) + 128]++;
    int a[256];
    for (int i = 0; i < 256; i++) a[i] = 0;
    int n=0;
    for(int i=0;i<256;i++){
        if(freq[i]!=0){
        a[n]=freq[i];
        n++;
        }
    }
    int temp;
    for(int i=1; i<=n-1; i++)                 
    {
        for(int j=1;j<=n-i;j++)
        {
            if(a[j-1]>a[j])
            {temp=a[j-1];
             a[j-1]=a[j];
             a[j]=temp;
            }
        }
    }
    int B=0;
    int sum=0;
    while(n>1){
        a[0]=a[0]+a[1];
        a[1]=257;
        sum=sum+a[0];
        for(int i=1; i<=n-1; i++){
            for(int j=1;j<=n-i;j++){
                if(a[j-1]>a[j]){
                    temp=a[j-1];
                a[j-1]=a[j];
                a[j]=temp;
                }
            }
        }
        n--;
    }
    cout<<sum;
    return 0;
}

运行有没有报错呀,有报错的话,把错误信息发出来看看。

代码无报错,可以进行正常运行,我猜你可能是在pta或者马学堂里面运行吧!里面虽然编织器无报错,但是在那里面可能会进行报错,主要是C语言的定义问题

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

我发现问题了,是a[1]=257这一步骤出现了问题。我的本意是想放一个够大的数排在最后,就可以不进入下一次排序。但是256不满足要求,当字符串足够长的时候,有的字符频率超过了256就会出现错误答案了。修改后就顺利通过了。

无论如何,也感谢各位的帮助。

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html