操作整数
2016-04-12 21:04
375 查看
题目描述
现在有两种操作:将一个整数*2或者将一个整数-1;给你两个整数A,B 请用以上两种操作把A转换成B,要求使用次数尽量少,输出最少操作次数
输入
输入包含多组测试数据,对于每组测试数据:输入包含一行
第一行:两个整数A,B
输出
最少操作次数样例输入
4 610 1
样例输出
29
提示
对于第一个 4 –>3 -> 6 两步
对于第二个 10->9->8->7……->2->1 九步
注意题中数据范围!
bfs里面如果num超过10000的话就不入队
不要重复命名局部变量和全局变量!
#include<cstdio> #include<iostream> #include<queue> #include<cstring> using namespace std; int m, n; struct node { int num; int step; }; node New,now; node first; bool vis[10000];//first int bfs() { queue<node>q; q.push(first); vis[first.num] = true; while(!q.empty()) { now = q.front(); q.pop(); New.num = now.num - 1; New.step = now.step + 1; if(!vis[New.num] && New.num <= 10000)//second { q.push(New); if(New.num == n) return New.step; vis[New.num] = true; } New.num = now.num * 2; New.step = now.step + 1; if(!vis[New.num] && New.num <= 10000) //thired { q.push(New); if(New.num == n) return New.step; vis[New.num] = true; } } return -1; } int main() { int i,j; while(scanf("%d%d", &m, &n) != EOF) { memset(vis, false, sizeof(vis)); first.num = m; first.step = 0; if (m > n) //forth { cout<<m-n<<endl; continue; } int ans = bfs(); if(ans > 0) printf("%d\n", ans); } return 0; }
相关文章推荐
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- Eclipse中Pydev使用import时出现报错
- Atitit.prototype-base class-based 基于“类” vs 基于“原型”
- Android:Fragment 与 ViewPager的配合使用
- 特殊的String
- 自定义拦截器没有加载
- PHP——函数_学习笔记
- 160. Intersection of Two Linked Lists
- 单链表反转
- 随机梯度下降
- 数论之最大公约数和最小公倍数
- ViewPager导航图片——简单实现方法
- 基于Solr的空间搜索学习笔记
- codeforces 569A A. Music(水题)
- 今天我装Ubuntu啦
- 四、s3c2440 裸机开发 通用异步收发器UARN
- DFS与BFS
- SQL优化(五) PostgreSQL (递归)CTE 通用表表达式
- win764位下qt开发中配置openssl库·
- poj 1269 Intersecting Lines