猜数字,暴力枚举0-9999,输入的A,B不用管,只需要处理数字即可

#include
using namespace std;
bool cmp(string &answer,string &guess,string &results)
{
    int a=0;//统计数字正确且位置正确的个数
    int b=0;//统计数字正确但位置不正确的个数
    vector guesslist;
    vector answerlist;
    for(int i=0;i<4;i++)
    {
        if(guess[i]==answer[i])
        {
            a++;
        }
        else{//方便统计b
            guesslist.emplace_back(guess[i]);
            answerlist.emplace_back(answer[i]);
        }
    }
    //暴力统计b的个数
    for(const auto &el:guesslist)
    {
        for(auto i=answerlist.begin();i!=answerlist.end();i++)//i为迭代器指针类型
        {
            if(*i==el)
            {
                answerlist.erase(i);
                b++;
                break;
            }

        }
    }
    return (results[0]-'0'==a)&&(results[2]-'0'==b);
}
int main()
{
    int n;
    cin>>n;
    vector guesses;
    vector results;
    for(int i=0;i     {
        string guess,res;
        cin>>guess>>res;
        guesses.emplace_back(guess);
        results.emplace_back(res);
    }
    vector answers;
    for(int num=0;num<=9999;num++)
    {

        string answer=to_string(num);
        while(answer.size()<4)
        {
            answer='0'+answer;
        }
        int i=0;
        for(;i         {
            if(!cmp(answer,guesses[i],results[i]))
            {
                break;
            }
        }
        if(i==n)
        {
            answers.emplace_back(answer);
        }

    }
    if(answers.size()!=1)
    {
        cout<<"NA";
    }
    else{
        cout<     }
    return 0;
}

你可能感兴趣的:(算法)