24点

24点运算

http://www.nowcoder.com/questionTerminal/7e124483271e4c979a82eb2956544f9d

深搜dfs

测试用例有问题,24点会有多组解的可能,通过65%,还看不到测试用例,好坑,本地测试ac。

#include <iostream> 
#include<string>
#include<string.h>
#include <algorithm>  
using namespace std;
int num[4];
int signal;
string operations = "+-*/";
bool dfs(int start,int sum)
{
    if (start==4&&sum == 24)
    {    
        signal = 1;
        for (int i = 0; i < 3; i++)
        {
            cout << num[i] << operations[i];
        }
        cout << num[3] << endl;
        return true;
    }
    for (int i =start; i < 4; i++)
    {
        if (!signal) {
            operations[start - 1] = '+';
            dfs(start + 1, sum + num[start]);
        }
        if (!signal) {
            operations[start - 1] = '-';
            dfs(start + 1, sum - num[start]);
        }
        if (!signal) {
            operations[start - 1] = '*';
            dfs(start + 1, sum * num[start]);
        }
        if (!signal) {
            operations[start - 1] = '/';
            dfs(start + 1, sum / num[start]);
        }
    }
    return signal;
}
int main()
{
    string str[4], strData = " A234567891JQK";
    while (cin>>str[0]>> str[1] >> str[2] >> str[3] )
    {   
        int error = 0;
        signal = 0;
        for (int i=0;i<4;i++)
        {
            if (str[i] == "10") num[i] = 10;
            else
            if (strData.npos == strData.find(str[i]))
            {
                error = 1;
                cout << "ERROR" << endl;
                break;
            }
            else  num[i] = strData.find_first_of(str[i]);
        }
        if (!error)
        {
            do
            {
                if (dfs(1, num[0])) break;
            } while (next_permutation(num, num + 4));
            if (!signal) cout << "NONE" << endl;
        }
    }
    return 0;
}
全部评论
我也遇到跟你一样的问题,数字转换成字母这一步没做吧。做完第二天才想起来,改了就通过了。
3 回复 分享
发布于 2020-06-15 13:19
除数为0你没考虑啊老哥
点赞 回复 分享
发布于 2020-03-11 08:56
而且为什么你每步dfs之后没有把当前符号还原呢?
点赞 回复 分享
发布于 2020-03-11 08:58

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
6 2 评论
分享
牛客网
牛客企业服务