您的位置:首页 > 其它

2015网易游戏笔试第2题(求出压缩的字符串展开后的个

2015-09-17 21:47 369 查看
#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<stack>
using namespace std;
int find_num(string &s,int &i);

int main()
{
int number=0;
cin>>number;
vector<string>s_list(number);
for(int i=0;i<number;i++)
{
cin>>s_list[i];
}
for(int i=0;i<number;i++)
{
stack<char>sta;
stack<int>sta1;
int ch_size=0;
int mul=0;
string s=s_list[i];
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')
{
sta.push(s[i]);
}
else if(s[i]>='A'&&s[i]<='Z')
{
if(i==0)  sta1.push(1);
else if(s[i-1]>='A'&&s[i-1]<='Z')
{
ch_size=sta1.top();
sta1.pop();
ch_size++;
sta1.push(ch_size);

}
else if(s[i-1]>='0'&&s[i-1]<='9')
{
ch_size=sta1.top();
sta1.pop();
ch_size++;
sta1.push(ch_size);
}
else
{
sta1.push(1);
}
}
else if(s[i]==')')
{

sta.pop();
ch_size=sta1.top();
i++;
mul=find_num(s,i);
ch_size=ch_size*mul;
sta1.pop();
sta1.push(ch_size);

}
else if(s[i]>='0'&&s[i]<='9')
{
ch_size=sta1.top();
mul=find_num(s,i);
sta1.pop();
sta1.push(mul+ch_size-1);
}
}
cout<<sta1.top()<<endl;
}
}

int find_num(string &s,int &i)
{
int num=0;
while(1)
{
num=num*10+s[i]-'0';
if(s[i+1]>='0'&&s[i+1]<='9')
i++;
else
break;
}
return num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: