zoj 1094 矩阵乘法计算解题分析

题目:zoj1094
解决思路:
矩阵部分:用一个二维数组储存矩阵的行列,矩阵前的大写字母可以过滤掉。
表达式:用字符数组进行储存,都存入。
对表达式的处理:遇到‘(’就进行过滤,因为对于乘法而言,它不起作用。然后遇到‘)’就弹出栈的两个元素进行行列式计算,计算之后得到的新的矩阵的行列再压入栈中。最后,遇到字母就查找对应的矩阵的行列进行压入栈中。
AC代码:

#include
#include 
#include 
using namespace std;int a[50][2];
struct mat {int row;int col;
};
int main() {//将矩阵行列读入二维数组a:int n;cin >> n;char c, str[1000];//c过滤前面的大写字母;stack<mat>s;for (int i = 0; i < n; i++) cin >> c >> a[i][0] >> a[i][1];while (cin >> str) {int sum = 0;//总的计算数。int len = strlen(str);bool flag = true;for (int i = 0; i < len; i++) {if (str[i] == '(')continue;else {//碰到)就弹出栈中的两个字母计算。if (str[i] == ')') {mat temp1, temp2,temp3;temp1 = s.top(); s.pop();temp2= s.top(); s.pop();if (temp2.col == temp1.row) {sum =sum+ temp2.row * temp2.col * temp1.col;//计算temp3.row = temp2.row; temp3.col = temp1.col;//复制结果s.push(temp3);//归栈。}else {cout << "error" << endl;flag = false;break;}}//字母转化进栈:else {int pos = str[i] - 'A';//定位矩阵位置mat temp;temp.row = a[pos][0];temp.col = a[pos][1];s.push(temp);//归栈。}}}if(flag)cout << sum << endl;//}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部