东莞市建设安监局网站首页,深圳网站设计(深圳信科),网站建设项目文档,水冷眸WordPress作者#xff1a;指针不指南吗 专栏#xff1a;蓝桥杯倒计时冲刺 #x1f43e;马上就要蓝桥杯了#xff0c;最后的这几天尤为重要#xff0c;不可懈怠哦#x1f43e; 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接#xff1a; 抓住那头牛 - C语言网 (dotcpp.com… 作者指针不指南吗 专栏蓝桥杯倒计时冲刺 马上就要蓝桥杯了最后的这几天尤为重要不可懈怠哦 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接 抓住那头牛 - C语言网 (dotcpp.com) 题目描述 农夫知道一头牛的位置想要抓住它。农夫和牛都位于数轴上农夫起始位于点N(0≤N≤100000)牛位于点K(0≤K≤100000)。农夫有两种移动方式 输入格式 两个整数N和K。 输出格式 一个整数农夫抓到牛所要花费的最小分钟数。 样例输入 5 17样例输出 4第一次 AC 50% #includebits/stdc.h
using namespace std;int main()
{int n,k;scanf(%d%d,n,k);if(nk){printf(0);return 0;}if(nk){printf(%d,n-k);return 0;}if(nk){printf(%d,max(1n-k,k-n));return 0; }return 0;} 第二次 AC 50% #includebits/stdc.h
using namespace std;int main()
{int n,k;scanf(%d%d,n,k);if(nk){printf(0);return 0;}if(nk){printf(%d,n-k);return 0;}if(nk){int xn,cnt0;while(xk){x*2;cnt;}if(cntk-x0){printf(%d,min(k-n,cntx-k));return 0;}else{int cmin(k-n,cntx-k);printf(%d,min(c,cntk-x));return 0;}}return 0;} DFS 题解 #includebits/stdc.h
using namespace std;int n,k;//深度搜索
int dfs(int t) //n到t的时间
{//不能乘车 if(tn) return n-t;//目标地分情况奇数和偶数//为什么这么分呢//偶数可以直接到直接一步一步走那里//奇数分成到t前面往后退一步到t后面往前走一步if(t%21){return min(dfs(t-1)1,dfs(t1)1);}else{return min(dfs(t/2)1,t-n);}}int main()
{cinnk;int s0;if(n0) //特判一下如果n0,2x没有用抓牛过程中无论如何至少会往前走一步{n;s;}sdfs(k);coutsendl;return 0;} 我的 low BFS #includebits/stdc.h
using namespace std;int n,k;//bfs 可以走的点放进队列里面走没走过的点然后走到想要的结果int d[100010];bool st[100010]; int bfs()
{queueint q;q.push(n);memset(d,-1,sizeof d);while(q.size()){int tq.front();q.pop();//分情况 if(tk) return 0;//扩展 三种情况q.push(t1);q.push(t-1);q.push(2*t);d[t];}return d[k];}int main()
{cinnk;coutbfs(); return 0;
}别笑emmm我也不知道我写的是个什么 正确 BFS #includeiostream
#includecstdio
#includecstring
#includequeue
using namespace std;
const int MAXN100001;
struct status{int n,t;status(int n,int t){nn;tt;}
};
bool visit[MAXN];int BFS(int n,int k){queuestatus myqueue;myqueue.push(status(n,0));//压入初始状态visit[n]true; //起始点已被访问while(!myqueue.empty()){status currentmyqueue.front();myqueue.pop();if(current.nk)//查找成功return current.t;for(int i0;i3;i)//转入不同状态 {status next(current.n,current.t1);if(i0)next.n1;else if(i1)next.n-1;elsenext.n*2;if(next.n0||next.nMAXN||visit[next.n])continue;//新状态不合法myqueue.push(next);//压入新的状态visit[next.n]true;//该点已被访问} }
}
int main()
{int n,k;cinnk;memset(visit,false,sizeof(visit));//初始化coutBFS(n,k)endl;return 0;
}正在进一步的理解 这个BFS算法还没有完全掌握 反思 一开始把这道题想成简单的模拟了可以 AC 50%还ok 模拟过程中第一次没有考虑全面 后面又改了一次还是不行看题解 真没想到这个使用的是 dfs 和bfs 果然做的题还是太少了 dfs 递归回溯bfs 不断扩展 直到找到结果
2.排列序数
今天新学的知识点跟大家分享一下特别帅 先输入字符串 s 然后使用 next_permutation() 输出全排列当全排列与初始字符串相等时结束 #includebits/stdc.h
using namespace std;int main()
{string sbac;sort(s.begin(),s.end());do{coutsendl;}while(next_permutation(s.begin(),s.end()));return 0;
}s“12345”,也是可以的