生活随笔
收集整理的这篇文章主要介绍了
猫狗收养所问题(指针模拟)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
用int型作为指针实现
猫狗收养所,只有猫和狗
第一个数是1表示是在输入
* 操作数如果是整数,表示是狗的编号
* 操作数如果是负数,表示是猫的编号
第二个数是2表示被领走
* 操作数如果是0,表示领走所有猫狗中最先进来的那个
* 操作数是1,表示领走狗中最先进来的那个
* 操作数是-1,表示领走猫中最先进来的那个
输入一堆操作
按照顺序输出被领走的小动物的编号
#include <vector>
#include <iostream>
using namespace std;
vector< pair<int,int> > v,store;
int dogreflesh(){
for (
int i =
0; i < v.size(); ++i) {
if (v[i].second >
0) {
return i;}}
return -
1;
}
int catreflesh(){
for (
int i =
0; i < v.size(); ++i) {
if (v[i].second <
0) {
return i;}}
return -
1;
}
int main(){
int dog, cat;dog = cat = -
1;
int oper, open;
while (
cin >> oper >> open) {
if (oper ==
1) {
if (open ==
0) {
continue;}
else if (open >
0){dog = v.size() -
1;}
else {cat = v.size() -
1;}v.push_back({oper, open});}
else if (oper ==
2){
if (open ==
0 && v.size() >
0) {store.push_back(v[
0]);v.erase(v.begin());dog = dogreflesh();cat = catreflesh();}
else if (open ==
1 && dog >=
0) {store.push_back(v[dog]);v.erase(v.begin() + dog);dog = dogreflesh();}
else if (open == -
1 && cat >=
0) {store.push_back(v[cat]);v.erase(v.begin() + cat);cat = catreflesh();}}}
for (
int i =
0; i < store.size(); ++i) {
cout << store[i].second<<
" ";}
}
下面是测试输入数据
1 1
1 -1
2 0
2 -1
输入结果是 1, -1
总结
以上是生活随笔为你收集整理的猫狗收养所问题(指针模拟)的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。