UVA442

#include<stdio.h> 
#include<string.h> 

struct Matrix{
	char name;
	int r,l;

};//建立结构体

struct Matrix a[30], b[30];
char str[1000] = {'\0'};
int n, i, t, top, sum, len;
bool flag;

void judge()
{
	if(!top) return ;//top为0时直接退出(这时桟里面只有一个元素)
	if(b[top - 1].l !=  b[top].r)
	{
		flag = false;
		return;		
	}//判断是否可以相乘
	if(flag == true)
	{	sum += b[top - 1].r * b[top].r * b[top].l;
		b[top - 1].l = b[top].l;
		-- top;
	}//计算相乘总数,然后将后一个的左值赋予前一个的左值,top指向前一个
}

int main(){

	scanf("%d", &n);
	getchar();
	for(i = 0;i < n; i++)
	{
		scanf("%c %d %d", &a[i].name, &a[i].r, &a[i].l);
		getchar();
	}//记得要用getchar吸收回车
	while(scanf("%s", str) == 1){
		len = strlen(str);
		sum = 0;
		top = -1;
		flag = true;
	for(i = 0;i < len; i++)		
	{
		if(str[i] == '(')
		continue;
		if(str[i] == ')')	
		{
			judge();
			if(!flag)		
				break;//如果judge中两个元素前后的左右值不同,直接跳出循环		
		}
		else
		{
			for(t = 0;t < n; t++)	
				if(a[t].name == str[i])	
					break;
			b[++top].r = a[t].r;
			b[top].l = a[t].l;//判断开头的字母,给桟里面的元素赋值
				
		}	
	}	
	if(flag)
		printf("%d\n", sum);
	else
		printf("error\n");
	}

return 0;
}















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值