解题思路:这个题用队列加vector的方法十分容易理解。就是需要考虑清楚每一步的过程.
(当然,这是我小白的时期写的,肯定有很多不对的地方。。。还请多多指正)。
注意事项:
参考代码:
#include<iostream> #include<queue> #include<vector> #include<algorithm> #include<cstring> using namespace std; queue <char> a; queue <char> b; vector <char> c;//公共,用于排火车(我们那边习惯这么叫) int found()//这个函数的作用是判断当前的牌和之前已经排好的牌有没有一样的 { for(int i=0;i<c.size()-1;i++) { if(c[i]==c.back()) return i; } return inf; } void print()// 最后打印结果的函数 { if(a.empty()) { while(!b.empty()) { cout<<b.front(); b.pop(); } } else if(b.empty()) { while(!a.empty()) { cout<<a.front(); a.pop(); } } } void match()// 最主要的函数 { int flag=1; while(a.size()!=0&&b.size()!=0) { if(flag%2==1)//a出牌 { if(!c.empty()) // 如果公共牌库不是空的,那么就要判断有无相同的牌了 { c.push_back(a.front()); a.pop(); int temp=found(); if(temp!=-1) { for(int i=c.size()-1;i>=temp;i--) a.push(c[i]); c.erase(c.begin()+temp,c.end()); flag--;// 再加上后面的flag++,就是还是轮到a } } else// 如果是空的,那就直接往里面扔牌 { // cout<<1; c.push_back(a.front()); a.pop(); //cout<<a.size(); } } else//b出牌 { if(!c.empty()) { c.push_back(b.front()); b.pop(); int temp=found(); if(temp!=-1) { for(int i=c.size()-1;i>=temp;i--) b.push(c[i]); c.erase(c.begin()+temp,c.end()); flag--; } } else { c.push_back(b.front()); b.pop(); } } // print(); // cout<<endl; flag++; // 这样用一个flag就可以在A、B间来回更替~~ // cout<<a.size()<<endl; // cout<<b.size(); } } int main() { string sa,sb; cin>>sa>>sb; for(int i=0;i<sa.size();i++) { a.push(sa[i]); } for(int i=0;i<sb.size();i++) { b.push((sb[i])); } match(); print(); return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.8 (C++代码)浏览:551 |
不容易系列 (C语言代码)浏览:661 |
Minesweeper (C语言代码)浏览:805 |
母牛的故事 (C语言代码)浏览:1716 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:558 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:690 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:543 |
淘淘的名单 (C语言代码)浏览:1104 |