POJ 1426 Find The Multiple 题解

版权声明:蒟蒻的博客,留个链接就是了…… https://blog.csdn.net/qq_42817441/article/details/88824653

题目大意

给你一个数n,要你求对应的m,m有如下要求:

  1. n的倍数
  2. 每一位仅由0或1组成

思路/思想

一开始拿道题比较懵,如果是搜索的话又该如何搜,十八个for,或是DFS??

我也不知道啊啊啊啊……

然后听学长讲了下,发现原来蛮简单的……

其实吧,因为你只能加0或1,也就是*10*10+1,所以你可以一路DFS下去,每次位数加1。

然后也不用剪枝,只用判断是否搜过头了(18位)。

代码

#include<cstdio>
using namespace std;
int n;
bool flag;
void dfs(long long m,int step)
{
    if(flag||step>18) return;
    if(m%n==0){
        printf("%lld\n",m);
        flag=1;
    }
    dfs(m*10,step+1);
    dfs(m*10+1,step+1);
}
int main()
{
    while(scanf("%d",&n)!=EOF){
        if(n==0)  break;
        flag=0;
        dfs(1,0);
    }
}

 注意一下POJ的毒瘤编译器,我选C++。 \color{red}\text{ 注意一下POJ的毒瘤编译器,我选C++。}

猜你喜欢

转载自blog.csdn.net/qq_42817441/article/details/88824653
今日推荐