c++11猫狗收容所【求大神帮忙做此题,实在实在想不出来了】

题目: 猫狗收容所

题目描述

有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。

输入描述

给定一个操作序列代表所有事件。若第一个元素为 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;
}