UVA442
Posted torettorui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA442相关的知识,希望对你有一定的参考价值。
这道题目很简单,就是表达式的计算问题。注意这个里面使用的表达式的计算方式,仅限于这道题目中定义的合法的表达式。
另外,发现我自己有点魔怔了,连输入的方式都非要这样那样了。是该总结一下,输入的所有方式了。
下面贴出这道题的代码:
#include<cstdio> #include<vector> #include<stack> #include<string> #include<iostream> using namespace std; int num_matri; struct Matric { int row; int col; }matric[26]; int main() { #ifdef local freopen("input.txt","r",stdin); #endif scanf("%d",&num_matri); for(int i=0;i<num_matri;i++)//输入矩阵 { char alph[2]; scanf("%s",alph); int row,col; scanf("%d%d",&row,&col); matric[alph[0]-‘A‘].row=row; matric[alph[0]-‘A‘].col=col; } string line; while(cin>>line)//输入保证合法,括号可以不入栈 { stack<Matric>Stack; int num=0; bool error=false; for(int i=0;i<line.size();i++) { if(line[i]==‘(‘) continue; if(isalpha(line[i])) { Stack.push(matric[line[i]-‘A‘]); } if(line[i]==‘)‘) { Matric a=Stack.top();//结构体可以给结构体赋值,大整数类是因为赋值的时候不是大整数类赋的值 Stack.pop(); Matric b=Stack.top(); Stack.pop(); if(b.col!=a.row) { error=true; break; } Matric c; c.row=b.row; c.col=a.col; Stack.push(c); num+=c.row*c.col*b.col; } } if(error) { printf("error "); } else { printf("%d ",num); } } return 0; }
以上是关于UVA442的主要内容,如果未能解决你的问题,请参考以下文章
UVA - 442 Matrix Chain Multiplication(栈模拟水题+专治自闭)