本文主要是介绍1541.加1乘2平方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1541.加1乘2平方
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
最简单的队列的使用
#include <iostream>
#include <queue>
using namespace std;
queue<int> q1;
int main()
{
int temp, x;
q1.push(5);//入队
q1.push(8);//入队
temp = q1.front();//访问队首元素
q1.pop();//出队
q1.empty();//判队列是否为空
q1.back();//返回队尾元素
q1.size();//返回队列长度
}
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
#include <iostream>
#include <queue>
using namespace std;
queue<int> q1;
int main()
{
int temp, x;
q1.push(5);//入队
q1.push(8);//入队
temp = q1.front();//访问队首元素
q1.pop();//出队
q1.empty();//判队列是否为空
q1.back();//返回队尾元素
q1.size();//返回队列长度
}
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
输入
输入两个10000以内的正整数m和n,且m小于n
输出
输出从m变化到n的最少次数
输入样例
1 16
输出样例
3
#include<iostream>
#include<queue>
using namespace std;int m,n;
int used[10001]={0};
int step[10001];int bfs();
int moveto(int u,int dir);queue<int>q;int main()
{int num;cin>>m>>n;q.push(m); //进行初始化used[m]=1;step[m]=0;num=bfs();cout<<num<<endl;
} int bfs()
{int u,v,i;while(!q.empty()) //如果队列非空{u=q.front(); //令u为队头q.pop(); //将队头取出for(i=0;i<3;i++){v=moveto(u,i); //v为u的三种新状态if(v==n) //如果v是目标值{return(step[u]+1);}if(v<=n&&used[v]==0) //判断v是否可以进一步扩展{q.push(v);used[v]=1;step[v]=step[u]+1;}} }
}int moveto(int u,int dir)
{if(dir==0){return(u+1);}if(dir==1){return(u*2);}if(dir==2){return(u*u);}
}
这篇关于1541.加1乘2平方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!