Find The Multiple

来源:互联网 发布:sql server查看主键 编辑:程序博客网 时间:2024/06/05 19:48

题目链接:Find The Multiple

题目大意

要求你输入一个200以内的正整数n,求n的倍数要求这个倍数只由0、1组成,得到的答案的位数在100以内。符合条件的任意答案都可以。

思路

本来拿到这个题目想到可以用深搜暴力所有的01整数,但是看到输出的范围为100以内的长度。存储是个问题。但是其实如果任意答案都可以的话,n的最大值就是200那么完全用不了100那么长的数,因此深搜可行。但是如果范围再大点就危险了,写了两个版本,一个是深搜,一个广搜+同余模定理。

深搜AC代码

#include <iostream>#include <cstdlib>using namespace std;long long unsigned dfs(long long unsigned n, long long unsigned num, int d){    if(n >= num){        return 0;    }    if(num%d == 0){        cout << num << endl;        return 1;    }    if(dfs(num, num*10, d)){        return 1;    }    return dfs(num, num*10+1, d);}int main(){    int d;    while(cin >> d && d){        dfs(0, 1, d);    }}

广搜+同余模定理
参考:http://blog.csdn.net/lyy289065406/article/details/6647917
我尽力了,是在是有点看不懂,先放着

#include <iostream>#include <cstdlib>using namespace std;/*long long unsigned dfs(long long unsigned n, long long unsigned num, int d){    if(n >= num){        return 0;    }    if(num%d == 0){        cout << num << endl;        return 1;    }    if(dfs(num, num*10, d)){        return 1;    }    return dfs(num, num*10+1, d);}int main(){    int d;    while(cin >> d && d){        dfs(0, 1, d);    }}*/int mod[524286];int main(){    int n, i;    while(cin >> n && n){        mod[1] = 1;        for(i = 2; mod[i-1] != 0; i++){            mod[i] = (mod[i/2]*10 + i%2)%n;        }        i--;        int p = 0;        while(i){            mod[p++] = i%2;            i /= 2;        }        while(p){            cout << mod[--p];        }        cout << endl;    }}
0 0
原创粉丝点击