非常典型的栈的数据结构,一定要读清题意,不断优化细节
#include<iostream>
#include<cstdio>
#include<string>
#include<stack>
#define maxn 55
using namespace std;
string str;
int pos,n,sigh;
bool match(string &a, string &b)
{
return (a[0]==b[0]||a[1]==b[1]);
}stack<string>s[maxn];
int main()
{
while(cin>>str)
{
if(str[0]=='#')break;
s[0].push(str);
for(int i=1;i<52;i++)
{
cin>>str;
s[i].push(str);
}n=52;
while(1)
{
pos=0;
for(;pos<n;pos++)
{
if(pos-3>=0&&match(s[pos].top(),s[pos-3].top()))
{sigh=1;break;}
if(pos-1>=0&&match(s[pos].top(),s[pos-1].top()))
{
sigh=2;break;
}
}
if(pos==n)break;
if(sigh==1)
{
s[pos-3].push(s[pos].top());
}
else
{
s[pos-1].push(s[pos].top());
}
s[pos].pop();
if(s[pos].empty())
{
for(int i=pos;i<n-1;i++)
s[i]=s[i+1];
while(!s[n-1].empty())
s[n-1].pop();n--;
}
}
cout<<n<<" pile";if(n>1)cout<<"s";cout<<" remaining:";
for(int i=0;i<n;i++)
{
cout<<" "<<s[i].size();
}
cout<<endl;
for(int i=0;i<n;i++)
{
while(!s[i].empty())
{
s[i].pop();
}
}
}return 0;
}