127 - "Accordian" Patience C++中栈,STL的模拟
来源:互联网 发布:eclipse 改变端口号 编辑:程序博客网 时间:2024/06/05 16:58
这个题说白了还是模拟,不过有很多需要注意的地方,而且也用到了STL模板函数,这里一开始我不会(毕竟没学过C++)网上找了很多资料,看了一晚上,也是码出来了,先说一下大体思路:
先定义牌的结构体,之后用栈堆来模拟牌堆(毕竟输入先进后出的栈原则,定义出stack<struct card>),之后牌堆我们也要将他放在一个集合里,所有我们用到了vector的集合,(vector<stack<strcut card> > cards>),之后就是直接模拟了,从头往尾数,数到符合条件的牌,移动,如果栈堆为空的话,就删除。
一些函数需要清楚,比如 栈 的函数
定义一个栈stack<int>c
往栈顶加入一个元素c.push();
往栈顶删除一个元素c.pop();
返回栈中的实际元素c.size();
查看栈是否为空,如果空的话,返回真值,c.empty();
关于vector的就比较多了,说几个比较常用的
定义一个集合 vector<stack<int> >c; 集合里面的每个元素就可以用c[i].来表示,和集合一样
往集合尾添加元素c.push_back();
返回首元素的地址c.begin();
删除一个元素c.erase();
通常c.erase(vector.begin()+pos);这么用,用首元素定位,删除第pos个元素
返回开头元素,c.front();
对结合初始化c.clear();
下面给出代码
#include<stdio.h>#include<string.h>#include<iostream>#include<vector>#include<stack>#define LEN 2 + 3using namespace std;struct Card /*定义一张牌的结构体*/{ char x,y;};int to_bemove(struct Card card_one,struct Card card_two){ if(card_one.x==card_two.x||card_one.y==card_two.y) return 1; else return 0;}int main(){ int pos,i,cases; char cad[LEN]; vector<stack<Card> >cards; while(true) { struct Card pat;/*定义一张卡*/ stack<Card>temp;/*定义一个卡堆*/ scanf("%s",cad); if(strcmp(cad,"#")==0) break; /*使用%s过滤空格*/ pat.x=cad[0];/*给这张卡附上花色以及点数*/ pat.y=cad[1]; temp.push(pat);/*将这张卡加入牌堆*/ cards.push_back(temp);/*将这堆卡放在桌子上*/ if(cards.size()==52) { while(true) { for(pos=0;pos<cards.size();pos++) { if(pos>=3&&to_bemove(cards[pos].top(),cards[pos-3].top())) { cards[pos-3].push(cards[pos].top()); cards[pos].pop(); break; } else if(pos>=1&&to_bemove(cards[pos].top(),cards[pos-1].top())) { cards[pos-1].push(cards[pos].top()); cards[pos].pop(); break; } } if(pos>=cards.size()) break; if(cards[pos].empty()) { cards.erase(cards.begin()+pos); /*如果卡堆为空,就删除*/ } } if(cards.size()==1) printf("%d pile remaining:",cards.size()); else printf("%d piles remaining:",cards.size()); for(i=0;i<cards.size();i++) printf(" %d",cards[i].size()); printf("\n"); cards.clear(); } } return 0;}
0 0
- 127 - "Accordian" Patience C++中栈,STL的模拟
- uva 127 ``Accordian'' Patience(栈+模拟)
- UVa 127 - "Accordian" Patience 栈+模拟
- uva 127 poj 1214 "Accordian" Patience (栈STL运用)
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVa-127 "Accordian" Patience(栈+模拟链表)
- UVA 127 - "Accordian" Patience (模拟)
- UVa 127 - "Accordian" Patience(模拟)
- UVA127 "Accordian" Patience 【模拟】
- uva127 "Accordian" Patience poj1214 模拟
- UVa 127 "Accordian" Patience
- 127 - "Accordian" Patience***
- UvaOJ 127 - "Accordian" Patience
- UVaOJ 127 - "Accordian" Patience
- uva 127 - "Accordian" Patience
- uva 127 - "Accordian" Patience
- uva-127 - "Accordian" Patience
- 转载-static_cast, dynamic_cast, const_cast,reinpreter_cast探讨
- vector容器中如何删除元素
- mysql修改默认字符编码
- label or lable 哪个正确?
- 2013-Proxy代理的使用
- 127 - "Accordian" Patience C++中栈,STL的模拟
- 网络编程
- Android中listview的一些调用
- AS3中将TUIO协议转换到传统触摸事件
- win for VirtualBox 下ubuntu 安装增强功能【失败】
- 发送邮件
- Interleaving String 交叉的字符串
- Iterator vs. Enumeration
- Python中random模块