欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

猫狗收养所问题(指针模拟)

发布时间:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 猫狗收养所问题(指针模拟) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

用int型作为指针实现
猫狗收养所,只有猫和狗
第一个数是1表示是在输入
* 操作数如果是整数,表示是狗的编号
* 操作数如果是负数,表示是猫的编号

第二个数是2表示被领走
* 操作数如果是0,表示领走所有猫狗中最先进来的那个
* 操作数是1,表示领走狗中最先进来的那个
* 操作数是-1,表示领走猫中最先进来的那个
输入一堆操作
按照顺序输出被领走的小动物的编号

#include <vector> #include <iostream> using namespace std; vector< pair<int,int> > v,store; int dogreflesh(){ //return the first dogfor (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

总结

以上是生活随笔为你收集整理的猫狗收养所问题(指针模拟)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。