HDU - 3347 Calculate the expression — 模拟 + map存变量
发布日期:2021-05-13 00:44:51 浏览次数:15 分类:博客文章

本文共 2084 字,大约阅读时间需要 6 分钟。

  

 

  题意:从输入开始,1.输入样例数;2.然后输入一组样例中的行数n;3.前n-1行为定义变量(之间使用空格隔开),只需要map存进去就可以了(这里有覆盖的情况,故使用mp["s"] = "***"的方法赋值,因为insert的方法如果里面存在的话,插不进入数值);4.然后就是最后一行输入计算式子(之间使用空格隔开)。

  思路:我使用的字符流的方法分割的的字符串,因为题中说了使用空格隔开的;

    变量的储存使用map就可以,在最后一行输入计算式子之后,同样使用字符流分割的方法,分割出来,判断是加法减法变量、数 字(正负)。   我做的时候就是以为都是加法,所以WA了一次。

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 #include
10 #include
11 #include
12 using namespace std;13 14 // 讲字符串转换为数字(这里的函数名起得不合适)15 long long asksum(string str, int s) {16 int len = str.length();17 long long sum = 0;18 for (int i = s; i < len; ++i) {19 sum = sum*10+(str[i]-'0');20 // cout << "qwe" << endl;21 }22 // cout << sum << "+++++" << endl;23 if (s)24 return sum*-1;25 return sum;26 }27 28 int main() {29 // ios::sync_with_stdio(false);30 // cin.tie(NULL);31 // cout.tie(NULL);32 33 int t, n;34 string str, s;35 map
mp;36 // 储存变量37 cin >> t;38 while (t--) {39 cin >> n;40 getchar();41 mp.clear();42 // 每一次清空上一次残留的变量43 long long sum = 0;44 for (int i = 0; i < n; ++i) {45 getline(cin, str);46 if (i == n-1) { // 在输入计算式的时候直接出结果,也可以讲变量和计算式分开47 int flag = 1;48 // 这个flag就是用来标记是加法还是减法的。49 stringstream ss(str);50 while (ss >> s) {51 if (s[0] >= '0' && s[0] <= '9') {52 sum += asksum(s, 0)*flag;53 // cout << "+" << endl;54 } else if (s[0] == '-' && s[1] >= '0' && s[1] <= '9'){55 sum += asksum(s, 1)*flag;56 // cout << "-" << endl;57 } else if (s == "+") {58 flag = 1;59 } else if (s == "-") {60 flag = -1;61 } else if (s[0] >= 'a' && s[0] <= 'z') {62 sum += mp[s]*flag;63 }64 }65 } else {66 stringstream ss(str);67 string var;68 int num = 0, zhi;69 while (ss >> s) {70 num++;71 // 因为变量赋值只有三部分,所以这里只需要去第一次和第三次即可72 if (num == 1) {73 var = s;74 } else if (num == 3) {75 if (s[0] == '-')76 zhi = asksum(s, 1);77 else78 zhi = asksum(s, 0);79 }80 }81 mp[var] = zhi;82 }83 // cout << mp.size() << " = size" << endl;84 }85 // cout << "sum = " << sum << endl;86 cout << sum << endl;87 }88 89 return 0;90 }
hdu 3347

 

  关于字符串分流的知识点:

上一篇:ACM、考研、就业,在我心底已经有了明确的答案_人生没有完整的,只有无悔的
下一篇:HDU - 1789 Doing Homework again(贪心) ~~~学了一波sort对结构体排序

发表评论

最新留言

不错!
[***.144.177.141]2025年04月27日 10时16分39秒