概述
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。
输入描述
给定一个操作序列代表所有事件。若第一个元素为 1 ,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为 2 ,则代表有人收养动物,第二个元素若为 0 ,则采取第一种收养方式,若为 1 ,则指定收养狗,若为 -1 则指定收养猫。
输出描述
请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。
示例1:
输入:1 1
1 -1
2 0
2 -1
输出:1 -1
#include <iostream>
#include <queue> // 编译预处理,调用队列queue模板
using namespace std;
class animal{
public:
int number;//动物编号
int order;//次序标志
animal(int n,int o) //构造函数
{
number = n;
order = o;
}
};
queue<animal> dogs; // 定义一个animal类的狗队列
queue<animal> cats; // 定义一个animal类的猫队列
int main(){
int m,t; // 每行输入2个元素。第一个元素是m,第二个元素是t.
// int n;
// cin>>n;
int order = 0;
while(cin>>m>>t){
// int m,t;
// cin>>m>>t;
if(m == 1){ // 若第一个元素为 1 ,则代表有动物进入收容所,
if(t > 0){ // 第二个元素为动物的编号,正数代表狗;
dogs.push(animal(t,order++));
}
else{ // 第二个元素为动物的编号,负数代表猫;
cats.push(animal(t,order++));
}
}
else{
// 若第一个元素为 2 ,则代表有人收养动物,
// 第二个元素若为 0 ,则采取第一种收养方式
// (第一种为直接收养所有动物中最早进入收容所的).
if(t == 0 && !dogs.empty() && !cats.empty()){
if(dogs.front().order < cats.front().order){ // 收养一条狗
cout<<dogs.front().number<<" ";
dogs.pop();
}
else{ // 收养一只猫
cout<<cats.front().number<<" ";
cats.pop();
}
}
else if(t == 0 && !dogs.empty() && cats.empty()){ // 收养一条狗
cout<<dogs.front().number<<" ";
dogs.pop();
}
else if(t == 0 && dogs.empty() && !cats.empty()){ // 收养一只猫
cout<<cats.front().number<<" ";
cats.pop();
}
else if(t == 1 && !dogs.empty())
{ // 若第一个元素为 2 ,则代表有人收养动物,第二个元素若为 1 ,则指定收养狗。
cout<<dogs.front().number<<" ";
dogs.pop();
}
else if(t == -1 && !cats.empty())
{ // 若第一个元素为 2 ,则代表有人收养动物,第二个元素若为 -1 则指定收养猫。
cout<<cats.front().number<<" ";
cats.pop();
}
}
}
cout<<endl;
return 0;
}
最后
以上就是传统裙子为你收集整理的C++10-2-STL:猫狗收容所的全部内容,希望文章能够帮你解决C++10-2-STL:猫狗收容所所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复