一组火车车厢编号1-n
从右向左经过车站
每节车厢可以临时进站(栈),放过主线上的几节车厢后再重新上路跟上。
输入车厢数和希望得到的车厢顺序,判断是否可能。
CCF教材下册P149,例6.9
代码如下:
1 #include <iostream> 2 #include <string> 3 #include <cmath> 4 #include <algorithm> 5 using namespace std; 6 struct Stack 7 { 8 int a[100]; 9 int p; 10 }; 11 bool isempty(Stack *s) 12 { 13 return s->p==-1; 14 } 15 void push(Stack *s,int x) 16 { 17 s->p++; 18 s->a[s->p]=x; 19 } 20 int pop(Stack *s) 21 { 22 if(!isempty(s)) 23 { 24 return s->a[s->p--]; 25 } 26 else 27 { 28 //cout<<"The stack is empty"; 29 return -1; 30 } 31 } 32 int gettop(Stack *s) 33 { 34 if(!isempty(s)) 35 { 36 return s->a[s->p]; 37 } 38 else 39 { 40 //cout<<"The stack is empty"; 41 return -1; 42 } 43 } 44 main() 45 { 46 Stack *mystack=new Stack; 47 int a[100]={0},b[100]={0},n,*p1,*p2;//a为目的序列,b为初始序列,b火车从右向左经过车站 48 bool flag=true; 49 mystack->p=-1; 50 p1=a; 51 p2=b; 52 //初始化开始 53 cin>>n; 54 for(int i=0; i<n; i++) 55 { 56 b[i]=i+1; 57 } 58 for(int i=0; i<n; i++) 59 { 60 cin>>a[i]; 61 } 62 //初始化结束 63 while(*p1!=0) 64 { 65 if(*p2==0&&gettop(mystack)!=*p1) 66 { 67 flag=false; 68 break; 69 } 70 else 71 { 72 if(*p1==*p2) 73 { 74 p1++; 75 p2++; 76 } 77 else if(*p1==gettop(mystack)) 78 { 79 pop(mystack); 80 p1++; 81 } 82 else 83 { 84 push(mystack,*p2); 85 p2++; 86 } 87 } 88 } 89 if(flag) 90 { 91 cout<<"I can do it."; 92 } 93 else 94 { 95 cout<<"That is impossible."; 96 } 97 free(mystack); 98 }
end here
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现