这道题其实挺有意思的,考你细心的程度
思路:
直接模拟两种操作就好了,用结构体存每一个箱子会比较简单一些。
每一条语句的详细意思可以看注释。
代码块部分:
结构体:
struct box{
int x,y;//箱子的坐标
string id;//箱子的名字
}a[10005];文件读写:
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);//文件读写 摆放箱子的操作:
if(opt==1){//操作 1
int xx,yy;
cin>>xx>>yy>>name;//输入坐标及名称
if(s[xx][yy]==false){//格子为空,可直接放入
cnt++;//成功放入柜子
a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值
s[xx][yy]=true;//格子已满
}else{//格子不为空,需要移动
if(yy==m){
yy=1;
xx++;
}
else yy++;//初始化
while(s[xx][yy]==true&&xx<=n){//找到合适的位置且没有越界
yy++;
if(yy-1==m){
yy=1;
xx++;
}
}
if(xx<=n){//找到了可放的格子
cnt++;//成功放入柜子
a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值
s[xx][yy]=true;//格子已满
}
}
}取出箱子的操作:
else{//操作2
bool tf=true;//布尔值代表是否找到箱子(找到为 false ,否则为 true )
cin>>name;//输入
for(int j=1;j<=cnt;j++){//循环查找
if(a[j].id==name){//找到箱子
cout<<a[j].x<<" "<<a[j].y<<endl;//输出
tf=false;//布尔值改变
s[a[j].x][a[j].y]=false;//此格子为空
a[j].x=-1,a[j].y=-1;
a[j].id="";//此箱子的各个数据设置为不可能再次查找到的值
break;//退出循环
}
}
if(tf==true)puts("-1 -1");//未找到箱子
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
struct box{
int x,y;//箱子的坐标
string id;//箱子的名字
}a[10005];
bool s[50][50];// s[i][j] 表示柜子的第 i 行 j 列的格子( false 代表空, true 代表满,这里默认初始化每个格子都为空)
int n,m,k,cnt=0;// cnt 为箱子已成功放入柜子的个数
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);//文件读写
cin>>n>>m>>k;//输入
for(int i=1;i<=k;i++){
int opt;
cin>>opt;//输入操作
string name;
if(opt==1){//操作 1
int xx,yy;
cin>>xx>>yy>>name;//输入坐标及名称
if(s[xx][yy]==false){//格子为空,可直接放入
cnt++;//成功放入柜子
a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值
s[xx][yy]=true;//格子已满
}else{//格子不为空,需要移动
if(yy==m){
yy=1;
xx++;
}
else yy++;//初始化
while(s[xx][yy]==true&&xx<=n){//找到合适的位置且没有越界
yy++;
if(yy-1==m){
yy=1;
xx++;
}
}
if(xx<=n){//找到了可放的格子
cnt++;//成功放入柜子
a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值
s[xx][yy]=true;//格子已满
}
}
}else{//操作2
bool tf=true;//布尔值代表是否找到箱子(找到为 false ,否则为 true )
cin>>name;//输入
for(int j=1;j<=cnt;j++){//循环查找
if(a[j].id==name){//找到箱子
cout<<a[j].x<<" "<<a[j].y<<endl;//输出
tf=false;//布尔值改变
s[a[j].x][a[j].y]=false;//此格子为空
a[j].x=-1,a[j].y=-1;
a[j].id="";//此箱子的各个数据设置为不可能再次查找到的值
break;//退出循环
}
}
if(tf==true)puts("-1 -1");//未找到箱子
}
}
return 0;
}