5错。不能理解,求教。
查看原帖
5错。不能理解,求教。
1346964
XianZai楼主2024/5/31 10:10

第一次编译,4和5报错。将 int count 改成long long int,通过4,但是5依然报错。求教大佬。

#include<iostream>
#include<list>
#include<string>
using namespace std;
class Word
{
private:
    char ch;//变换的左部
    list<char> nextChar;//可以变换的字符
public:
    Word(char ch):ch(ch)
    {
        nextChar.push_back(ch);//首先可以变换成自己
    }
    char getChar(){return ch;}
  //获取可变换的种类数目
    int getNextCount(){return nextChar.size();}
  //更新可变换字符的列表。tran[k][0]和tran[k][1]记录转换规则
    void setList(const char tran[][2],const int n)
    {
        auto it=nextChar.begin();
        for(;it!=nextChar.end();it++)
        {
            for(int i=0;i<n;i++)
            {
                if(tran[i][0]==(*it))
                {
                    bool found=false;
                    for(auto iitt=nextChar.begin();iitt!=nextChar.end();iitt++)
                    {
                        if(*iitt==tran[i][1])found=true;
                    }
                    if(!found)nextChar.push_back(tran[i][1]);
                }
            }
        }
    }
  
//show函数用于展示可变换字符的列表,以查看正确与否
//    void show()
//    {
//        for(auto it=nextChar.begin();it!=nextChar.end();it++)
//            cout<<*it<<" ";
//        cout<<endl;
//    }

};

int main()
{
    const char* ch;//ch 输入的字符
    int len;//len 输入的长度
    string str;
    cin>>str;
    len=str.size();
    ch=str.c_str();

    int k;cin>>k;//k 转换规则的数目
    char tran[k][2];//tran[k][0]和tran[k][1]记录转换规则
    for(int i=0;i<k;i++)cin>>tran[i][0]>>tran[i][1];

    list<Word> wordList;
    for(int i=0;i<k;i++)
    {
        bool existed=false;
        for(auto it=wordList.begin();it!=wordList.end();it++)
        {
            if((*it).getChar()==tran[i][0])existed=true;
        }
        if(!existed){
            wordList.push_back(Word(tran[i][0]));
            wordList.back().setList(tran,k);
        }
    }
    //    for(auto it=wordList.begin();it!=wordList.end();it++)
    //    {
    //        (*it).show();
    //    }

    long long int count=1;
    for(int i=0;i<len;i++)
    {
        auto it=wordList.begin();
        for(;it!=wordList.end();it++)
        {
            if(ch[i]==(*it).getChar()) break;
        }
        if(it!=wordList.end())count*=(*it).getNextCount();
    }
    cout<<count<<endl;
    return 0;
}

2024/5/31 10:10
加载中...