深搜部分错误?
查看原帖
深搜部分错误?
281637
Ignite6666楼主2020/7/7 16:54

我想用深搜来着,搜索乘数被乘数共五个数字,但是只有前三个用例过了,请问为什么啊。。。

# include <iostream>
using namespace std;

int list[11];
int n;
int sum = 0;
int num[6] ={0};
//num  0  1  2 | 3  4   034,12
//     百 十 个 |十 个

bool have(int p)
{
    for (int j = 0; j < n; j ++)
    {
        if (p ==list[j])
            return true;
    }
    return false;
}

void dfs(int i)
{
    if(i < 5)
    {
        for (int j = 0; j < n; j ++) //所有数字的情况
        {
            num[i] = list[j];
            if ((num[0]*100 + num[3]* 10 + num[4]) *num[1] >999 || (num[0]*100 + num[3]* 10 + num[4]) *num[2] >999)
                continue;
            else
                dfs(i + 1);
        }
    }
    else
    {
        if((num[0]*100 + num[3]* 10 + num[4]) * (num[1] * 10 + num[2])<= 9999)
        {
            int x = (num[0] * 100 + num[3] * 10 + num[4]) * num[1];
            int y = (num[0] * 100 + num[3] * 10 + num[4]) * num[2];
            int z = (num[0] * 100 + num[3] * 10 + num[4]) * (num[1] * 10 + num[2]);
            if(have(x / 100) &&have((x % 100) /10) &&have(x % 10) &&have(y / 100) &&have((y % 100) /10) &&have(y % 10) &&have(z / 1000) &&have((z % 1000) /100) &&have((z % 100) /10) &&have(z%10))
                sum++;
            else
                return;
        }
        return;
    }

}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        cin >> list[i];
    }
    dfs(0);
    cout << sum;
    system("pause");
    return 0;
}
2020/7/7 16:54
加载中...