题目: 猫狗收容所
题目描述
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。
输入描述
给定一个操作序列代表所有事件。若第一个元素为 1 ,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为 2 ,则代表有人收养动物,第二个元素若为 0 ,则采取第一种收养方式,若为 1 ,则指定收养狗,若为 -1 则指定收养猫。
输出描述
请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。
样例输入
1 1 1 -1 2 0 2 -1
样例输出
1 -1
代码如下,如有帮助,请采纳一下,谢谢。
#include <iostream>
#include <list>
using namespace std;
struct Animal
{
int type;//正数代表狗,负数代表猫
};
int main()
{
list<Animal> listAnimals;
list<Animal>::iterator it;
int op,type;
int i;
while(true)
{
cout << "请输入操作(1收留,2领养)及领养的动物类型(正数代表狗,负数代表猫):";
cin >> op >> type;
//if(op < 0) break;
if (op ==1) //入
{
Animal am;
if(type > 0)
am.type = 1;
else
am.type = -1;
listAnimals.push_back(am);
}else if (op == 2) //领养
{
if (0 == type)
{
Animal am = listAnimals.front();
listAnimals.pop_front();
cout << am.type <<endl;
}else if (1 == type || -1 == type)
{
for (it = listAnimals.begin(),i = 0; it != listAnimals.end();it++,i++)
{
if (it->type == type)
{
cout << type << endl;
listAnimals.erase(it);
break;
}
}
}
}else
cout << "无效的操作符。";
}
return 0;
}