传送门

  题意:从输入开始,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. js前端技术

    一.前端技术 1.HTML HTML(hypertext markup language)超文本标记语言,不同于编程语言. 超文本就是超出纯文本的范畴,描述文本的颜色.大小.字体. HTML由一个个标 ...

  2. 【LeetCode】10.Regular Expression Matching(dp)

    [题意] 给两个字符串s和p,判断s是否能用p进行匹配. [题解] dp[i][j]表示s的前i个是否能被p的前j个匹配. 首先可以分成3大类情况,我们先从简单的看起: (1)s[i - 1] = p ...

  3. 让你弄懂js中的闭包

    目录 闭包 闭包如何产生 闭包是什么 常见的闭包 闭包的作用 闭包的生命周期 闭包的应用 闭包的缺点 内存泄露 内存溢出 闭包面试题 闭包 之前在我执行上下文执行上下文栈这篇文章中,出现了这样一个题目 ...

  4. Git标签与别名

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  5. 一个软件工程师的硬件修养:ESP8266 入门(普通动感单车-变智能)

    前言 一直在开发软件.今日突然心血来潮想尝试一下硬件. 于是就买了这样一个板子: 买的淘宝上大佬帮忙找的一个套装. 除了板子之外还有一些线和其他配件:温湿度传感器,气压传感器,光线传感器,小屏幕. 板 ...

  6. springboot集成swagger实战(基础版)

    1. 前言说明 本文主要介绍springboot整合swagger的全过程,从开始的swagger到Knife4j的进阶之路:Knife4j是swagger-bootstarp-ui的升级版,包括一些 ...

  7. Filebeat配置文件解析-转载

    转载地址:https://dongbo0737.github.io/2017/06/13/filebeat-config/ Filebeat配置文件解析 filebeat 一个ELK架构中,专门用来收 ...

  8. Python爬虫知乎文章,采集新闻60秒

    前言 发现很多人需要新闻的接口,所以自己去搜索了下,发现知乎上正好有对应的用户每天发布新闻简讯,所以自己想写一个新闻的爬虫.如果想做成接口的话,可以加上flask模块即可,这里就暂时只进行爬虫部分的编 ...

  9. VisualGDB_VS2010_开发PHP扩展

    1.新建一个Linux项目

  10. java面试-JVM内存结构

    一.JVM内存结构 二.类加载(classLoader)机制 java中的ClassLoader详解 java类加载机制面试题 java类加载机制面试题 虚拟机把描述类的数据从Class文件加载到内存 ...