POJ-1426(Find The Multiple)--简单搜索
2015-07-02 20:25
344 查看
题目大意:给你一个整数N,让你找一整数M是N的整数倍数且整数M是由0和1组成的
解题思路:这是一道以前做过的题,不过现在再次来看,又有不同的思考。
不过核心思想还是一个:N的范围是1~200,那么这个整数M最多不超过20位(别问我为什么,因为爱情)
而且M上的数字不是1就是0,那么就可以用枚举的算法了;
这里我还写了两种方法:
1、用BFS,这样思路清晰,而且效率也够快。就是在前面的情况上填1和0两种情况,不过不好想
2、用数字来表示二进制,如1表示00000000001,5表示0000000101,这样再用位运算将数字转化成M
代码:
BFS
数字二进制转化
两个代码风格上有些区别,但确实是本人写的,不过写的时期不一样,所以看起来不同。
复制去Google翻译翻译结果
解题思路:这是一道以前做过的题,不过现在再次来看,又有不同的思考。
不过核心思想还是一个:N的范围是1~200,那么这个整数M最多不超过20位(别问我为什么,因为爱情)
而且M上的数字不是1就是0,那么就可以用枚举的算法了;
这里我还写了两种方法:
1、用BFS,这样思路清晰,而且效率也够快。就是在前面的情况上填1和0两种情况,不过不好想
2、用数字来表示二进制,如1表示00000000001,5表示0000000101,这样再用位运算将数字转化成M
代码:
BFS
#include <set> #include <map> #include <list> #include <queue> #include <stack> #include <cmath> #include <string> #include <cstdio> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define PB push_back #define SIZE(x) (int)x.size() #define clr(x,y) memset(x,y,sizeof(x)) #define FOR(i,n,m) for(int i=n;i<=m;i++) #define ROF(i,n,m) for(int i=n;i>=m;i--) #define IT iterator #define maxn 200+5 typedef long long ll; void RI(int& x) { x=0; char c=getchar(); while(!((c>='0'&&c<='9')||c=='-'))c=getchar(); bool flag=1; if(c=='-') { flag=0; c=getchar(); } while(c<='9'&&c>='0') { x=x*10+c-'0'; c=getchar(); } if(!flag)x=-x; } void RII(int& x,int& y) { RI(x);RI(y); } void RIII(int& x,int& y,int& z) { RI(x);RI(y);RI(z); } /*************************DEADLINE*************************************/ bool vis[maxn]; int a; queue<ll>q; long long dfs() { clr(vis,false); while(!q.empty())q.pop(); q.push(1); while(!q.empty()) { ll tem=q.front(); q.pop(); int n=tem%a; if(n==0)return tem; if(!vis ) { vis =true; FOR(i,0,1) { ll x=tem*10+i; q.push(x); } } } } int main() { while(scanf("%d",&a),a) { printf("%lld\n",dfs()); } return 0; }
数字二进制转化
#include <set> #include <map> #include <list> #include <queue> #include <stack> #include <cmath> #include <string> #include <cstdio> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> //#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; #define PB push_back #define FOR(i,n,m) for(int i=n;i<=m;i++) #define ROF(i,n,m) for(int i=n;i>=m;i--) #define clr(i,j) memset(i,j,sizeof(i)) #define maxn 17 typedef long long ll; int main() { int n,upper=1<<20; while(scanf("%d",&n),n) { ll res; for(int i=1;i<upper;i++) { res=0; ll e=1; for(int j=0;j<20;j++) { if((i>>j)&1)res+=e; e=e*10; } if(res%n==0)break; } printf("%lld\n",res); } return 0; }
两个代码风格上有些区别,但确实是本人写的,不过写的时期不一样,所以看起来不同。
复制去Google翻译翻译结果
相关文章推荐
- Maven构建多模块项目
- 人民币金额大小写Js转换
- 你的灯还亮着吗阅读笔记之二
- 你的灯还亮着吗阅读笔记之一
- 进度太慢了,扫频仪PCB
- 静态路由配置中出现的问题:0
- <T> T[] List.toArray(T[] a) static <T> List<T> Arrays.asList(T... a)
- 1、ls命令
- Maven Tomcat7自动部署
- List、Map和Set实现类
- eclipse无法自动识别出svn项目
- 人月神话阅读笔记之三
- 人月神话阅读笔记之二
- WIN7/8 独立更新安装程序 安装时遇到错误
- java加密与解密
- 人月神话阅读笔记之一
- 移动端混合型 App(hybrid app)自动化测试选型与实践
- 正则里的 /x7f-/xff 这样东西
- 别被技术绑架
- 梦断代码阅读笔记之三