传送门

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

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

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

 1 #include <iostream>
2 #include <algorithm>
3 #include <sstream>
4 #include <string>
5 #include <vector>
6 #include <queue>
7 #include <map>
8
9 #include <cstdio>
10 #include <cstring>
11 #include <cmath>
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<string, int> 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 else
78 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

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

HDU - 3347 Calculate the expression — 模拟 + map存变量的更多相关文章

  1. 组合数学第一发 hdu 2451 Simple Addition Expression

    hdu 2451 Simple Addition Expression Problem Description A luxury yacht with 100 passengers on board ...

  2. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  3. js模拟Map对象,实现key---value

    js模拟Map对象,实现key---value 根据java中map的属性,实现key----value保存 function Map() { var struct = function (key, ...

  4. BZOJ 2157: 旅游 (结构体存变量)

    用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include < ...

  5. HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)

    6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...

  6. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. HDU 4814 Golden Radio Base 模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题目大意: 把一个正整数表示为φ进制, φ = (1+√5)/2 . 且已知: 1. φ + 1 ...

随机推荐

  1. 部署Angular应用到Github pages

    https://jeneser.github.io/blog/2017/08/08/angular-deploying-app-github-pages/ Published: August 08, ...

  2. Webpack 学习笔记(1) 开始

    目录 参考资料 1. 基础设定 2. 创建一个包 3. 使用配置文件完成打包命令 4. 使用 NPM Scripts 完成打包命令 参考资料 Getting Started | Webpack web ...

  3. 菜刀jsp小马

    逛google收获小马一枚,收藏一下 <%@page import="java.io.*,java.util.*,java.net.*,java.sql.*,java.text.*&q ...

  4. Java学习之路 -- Java怎么学?

    @ 目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...

  5. go每日一库 [home-dir] 获取用户主目录

    关于我 我的博客|文章首发 顾名思义,go-homedir用来获取用户的主目录.实际上,通过使用标准库os/user我们也可以得到内容,使用以下方式 标准库使用 package main import ...

  6. Flex属性你真的搞清楚了吗?我深表怀疑

    背景 在使用弹性布局实现两侧宽度固定,中间宽度自适应的效果时,发现自己理解的和实际效果不一致,所以亲自实践验证了一个flex属性的诸多场景的表现,不仅解开了我之前使用过程遇到的疑惑,而且发现了许多自己 ...

  7. 使用KeepAlived来实现高可用的DR模型

    环境 VMware 16 CentOS8 相关软件 keepalived ipvsadm httpd 准备工作 准备四个节点,如上图,Node01 ~ Node04, 本文默认你会在VMWare上安装 ...

  8. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.5 状态空间平均 7.6 本章小结

    7.5 状态空间平均 现有文献中已经出现了很多变换器交流建模的方法,其中包括电流注入法,电路平均和状态空间平均法.尽管某种特定方法的支持者可能更愿意使用该方法去建模,但所有方法的最终结果都是等效的.并 ...

  9. 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...

  10. CODING 首届金融科技技术交流闭门会议顺利召开

    近期,由腾讯云旗下一站式 DevOps 开发平台 CODING 和中国 DevOps 社区主办的深圳第十一届 Meetup 圆满结束,会上三位专家分享了自己独到的行业见解,腾讯云 CODING Dev ...