今天豆豆告诉我河南省设计院已经给她回复了,让她过几天就回去面试,不愧是我的女朋友,一出手就有了,我也要加油了~

已经笔试过的两家企业,感觉都还行,在结果出来之前我就不评论了。事在人为,就算这次没能通过,我相信这两次笔试的经历也将是我今后找工作道路上宝贵的经验。

今天下午把报告交给金野老师,开题算是正式完成,然后就是看代码和敲代码的节奏。

最近还一直在看各种程序员笔试宝典之类的东西,在看到好的解题思路时,真是有一种深深的智商被碾压感,的确是要更加努力了。

标题是一句我非常喜欢的广告语,话说在国产企业里,这文案我觉得算是相当不错了。

Keep Moving,永不止步!

~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~

1443:很简单的一道栈模拟,题意是计算矩阵运算过程中参与运算的数据对有多少,如果参加运算的矩阵不符合矩阵乘法,即左边的列数不等于右边的行数,就报错。

关于括号处理,这题的思路就是模拟一个栈,扫描输入字符串,如果是左括号不处理,是字母就将其对应的行数和列数压栈,如果是右括号,则将栈顶的两个矩阵的行列数弹出进行计算,如果报错,就跳出扫描,如果有结果,则将数据对数目累加到结果中,并将乘积矩阵压栈,继续扫描。最后输出结果即可。

在这题里我还复习了一下C++里map的用法,果然是方便啊,还有一点要注意的是,(cin >> str) != EOF在HOJ上会报错,还是得用scanf的形式。

话不多说,代码如下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <map>
using namespace std;

typedef struct Stack{
    int r[100];
    int c[100];
    int top;
}Stack;

void pop(Stack &s){
    s.top--;
}

void push(Stack &s, int row, int column){
    s.r[++s.top] = row;
    s.c[s.top] = column;
}

int main(){
    Stack s;
    map<char, int> rows, columns;
    int n, row, column, result, err;
    char name, expression[100];
    cin >> n;
    while(n--){
        cin >> name >> row >> column;
        rows[name] = row;
        columns[name] = column;
    }
    while((scanf("%s", expression)) != EOF){
        err = result = 0;
        s.top = -1;
        for(int i = 0; i < strlen(expression); i++){
            if(expression[i] >= 'A' && expression[i] <= 'Z')
                push(s, rows[expression[i]], columns[expression[i]]);
            else if(expression[i] == ')'){
                if(s.c[s.top - 1] != s.r[s.top]){
                    err = 1;
                    break;
                }else{
                    result += s.r[s.top - 1] * s.c[s.top] * s.c[s.top - 1];
                    s.c[s.top - 1] = s.c[s.top];
                    pop(s);
                }
            }
        }
        if(err)
            cout << "error" << endl;
        else
            cout << result << endl;
    }
}