1、第一道题是栈:POJ-->2246:
思路:起初看到这道题的时候,我在想是不是要用到搜索呢,可是后来发现,其实用到栈远远比搜索来的简单。
方法:说起来,其实就是很简单的遇到‘(’:continue,‘)’:计算矩阵的值并且更替这个值,top--,遇到字母则入栈。
#include<stdio.h>
#include<string.h>
struct point{
int row;
int cols;
};
int top;
int main(){
int T,i,len,j,sum,flag;
char a,b,c,s[100];
struct point p[30],stack[100];
scanf("%d",&T);
getchar();
for(i=0;i<T;i++){
scanf("%c%d%d",&a,&b,&c);
p[a-'A'].cols=b;
p[a-'A'].row=c;
getchar();
//printf("%c %d %d\n",a,b,c);
}
while(gets(s)){
flag=0;
memset(stack,0,sizeof(stack));
sum=0;
top=0;
len=strlen(s);
for(i=0;i<len;i++){
if(s[i]=='(')
continue;
else if(s[i]==')'){
if(stack[top].cols!=stack[top-1].row)
{
printf("error\n");
flag=1;
break;
}
else{
sum = sum+stack[top].cols*stack[top].row*stack[top-1].cols;
stack[top-1].row = stack[top].row;
top--;
}
}
else{//字母需要入栈
top++;
stack[top].cols=p[s[i]-'A'].cols;
stack[top].row = p[s[i]-'A'].row;
}
}
if(flag==0&&sum>=0)
printf("%d\n",sum);
}
}