解题思路:
使用C++中封装好的队列和栈数据结构来解题会很简单
三个运输带可以看成三个队列 先进先出 (输入时先进 推下来时先出)
框子可以看成一个栈数组 从顶入从顶出
整理下队列和栈结构相关知识点
队列的基本操作
queue<数据类型>q(名称);//定义
q.push(x) //将x插入到队列末端
q.pop() //将队首元素弹出
q.front() //访问队首元素
q.back() //访问队尾元素
q.size() //队列元素个数
q.empty() //队列是否为空
栈的基本操作
stack<数据类型>s(名称) //定义
s.push(x) //将x压入到栈顶
s.pop() //将栈顶元素弹出
s.top() //访问栈顶元素
s.empty() //判断栈是否为空
s.size() //栈中元素个数
解题代码
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int main() {
int n,m,smax;
scanf("%d %d %d",&n,&m,&smax);
queue<char>q[n+1];
stack<char>s;
//元素入队
for(int i=1;i<=n;i++)
{
for (int j = 0; j < m; ++j) {
char c;cin>>c;
q[i].push(c);
}
}
while (1)
{
int x;
scanf("%d",&x);
if(x==-1)
break;
else if(x==0&&!s.empty())
{
cout<<s.top();
s.pop();
}
else
{
if (s.size() < smax && q[x].size()) //入栈
{
s.push(q[x].front());
q[x].pop();
}
else if(s.size() >= smax && q[x].size()) {
cout << s.top();
s.pop();
s.push(q[x].front());
q[x].pop();
}
}
}
return 0;
}
解题时遇到的困难:初次提交时发现总是显示段错误,后来经过检查多遍后才看到是用scanf输入字符的错误 scanf输入字符时 会将空格和回车读入到下一个字符,将scanf 改为cin输入时,解决了该问题。