设有一个表L=(a1,a2,a3,……,an),其中L为表名,a1,a2,a3,……,an为表中元素,但ai为数值时,表示一个元素值;当ai为大写字母时,表示另一个表,但不能循环定义。
输入:
L 3,4,8,S,9,0,8,T
S 10,3,4,U,9,6
T 4,5,6
U 7,9,8,6
输出:
10
分析:水题。老师出题的本意是为了引入队列(queue),但我觉得在这里用就多余了。他的本意是先读入一行,遇到大写字母就读入多一行,检索完后再回到原先那个表。但我发觉其实不用这样的,只要遇到大写字母时,记录要多读入一次数据就行了,这里只需要求最大值,只要读完所有数据就行了。
#include<iostream>
using namespace std;
int j,max;//max保存最大值,j保存当前输入的表个数
void f(char s[])
{
int i,temp;
j--;
for(i=2;s[i]!='\0';i++)
{
if(s[i]>='0'&&s[i]<='9')//构造数字
{
temp=0;
while(s[i]>='0'&&s[i]<='9')
{
temp=temp*10+s[i]-'0';
i++;
}
if(max<temp)
max=temp;
}
else
{
if(s[i]>='A'&&s[i]<='Z')//遇到字母即多一个表要输入多一次
j++;
}
}
}
int main()
{
char s[1000];
int i;
while(cin.getline(s,1000))
{
max=s[2]-'0';
j=1;
for(i=0;i<j;i++)
{
f(s);
if(i!=j-1)
cin.getline(s,1000);
}
cout<<max<<endl;
}
return 0;
}