原题:https://uva.onlinejudge.org/external/2/215.pdf

有一个M x N的表格,每个单元格是个数字或者表达式。表达式由单元格编号和+ - 号组成

输出单元格的结果

思路:用dfs判断有向图环的问题

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <utility>
#include <cstring>
#include <sstream> using namespace std;
const int MAXR = + , MAXC = + ;
string sheet[MAXR][MAXC];
int r, c;
bool hasCircle[MAXR][MAXC], f[MAXR][MAXC], ok; bool isNumber(int x, int y) {
string s = sheet[x][y];
int l = s.size();
if (isalpha(s[])) return false;
for (int i = ; i < l; i++) {
if (i != && !isdigit(s[i])) return false;
}
return true;
} void dfs(int x, int y) {
if (hasCircle[x][y] || isNumber(x, y)) return;
if (f[x][y]) {hasCircle[x][y] = ; return; }
f[x][y] = ;
string s = sheet[x][y];
char sign; int ans = , right, len = sheet[x][y].size(), i = ;
while (i < len) {
sign = '+';
if (s[i] == '-' || s[i] == '+') {
sign = s[i];
i++;
}
if (isalpha(s[i])) {
int nx = s[i] - 'A', ny = s[i + ] - '';
i += ;
dfs(nx, ny);
if (hasCircle[nx][ny]) {
hasCircle[x][y] = ;
return;
}
right = stoi(sheet[nx][ny]);
}
else {
int j = i + ;
while (j < len && isdigit(s[j])) j++;
right = stoi(s.substr(i, j - i));
i = j;
}
ans += right * ((sign == '+') ? : -);
}
stringstream ss; ss << ans;
ss >> sheet[x][y];
} int main() {
freopen("in", "r", stdin);
//freopen("out", "w", stdout);
while (scanf("%d%d", &r, &c) == && r) {
memset(f, , sizeof(f));
memset(hasCircle, , sizeof(hasCircle));
ok = ;
for (int i = ; i < r; i++)
for (int j = ; j < c; j++)
cin >> sheet[i][j]; for (int i = ; i < r; i++)
for (int j = ; j < c; j++) {
if (!f[i][j])
dfs(i, j);
if (hasCircle[i][j]) ok = ;
}
if (!ok) {
for (int i = ; i < r; i++)
for (int j = ; j < c; j++)
if (hasCircle[i][j]) cout << char(i + 'A') << j << ": " << sheet[i][j] << endl;
}
else {
putchar(' ');
for (int i = ; i < c; i++) printf(" %d", i);
putchar('\n');
for (int i = ; i < r; i++) {
printf("%c", i + 'A');
for (int j = ; j < c; j++) {
for (int k = ; k < - sheet[i][j].size(); k++) putchar(' ');
cout << sheet[i][j];
}
putchar('\n');
}
}
putchar('\n');
} return ;
}

Spreadsheet Calculator 电子表格计算器 (Uva 215)的更多相关文章

  1. UVA 215 Spreadsheet Calculator (模拟)

    模拟题.每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复. 这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写 ...

  2. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  3. [LeetCode] 224. Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  4. 【229】Raster Calculator - 栅格计算器

    参考:分段函数进行复制,利用语句 参考:ArcGIS栅格计算器 - CSDN 参考:ArcGIS栅格计算器con条件函数使用 参考:ArcGIS栅格计算器 - 电脑玩物 ("lyr" ...

  5. Basic Calculator 基本计算器

    2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈 ...

  6. 224 Basic Calculator 基本计算器

    实现一个基本的计算器来计算一个简单的字符串表达式. 字符串表达式可以包含左括号 ( ,右括号),加号+ ,减号 -,非负整数和空格 . 假定所给的表达式语句总是正确有效的. 例如: "1 + ...

  7. uva 215 hdu 1455 uvalive5522 poj 1011 sticks

    //这题又折腾了两天 心好累 //poj.hdu数据极弱,找虐请上uvalive 题意:给出n个数,将其分为任意份,每份里的数字和为同一个值.求每份里数字和可能的最小值. 解法:dfs+剪枝 1.按降 ...

  8. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  9. jsp学习---使用jsp和JavaBean实现超简单网页计算器

    一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...

随机推荐

  1. Linux Stu

    指定命令别名 alias ..='cd ..' 命令连接符 持续的执行命令,不管错误 [命令1]; [命令2]; [命令3];   前一个正确才执行下一个 [命令1] && [命令2] ...

  2. sql 学习笔记 p46

    交换行 update tab1 set c1=c2,c2=c1  .说明sql是临时表的存储,在查询出来的结果为决定前,可以随意操纵临时表中的列 update tab set c1=c1+(selec ...

  3. C# 汉字的字符串截取指定字节的长度

    int index = 0;            int setCharCount = 74;            string str1 = "三星 SCH-I829 电信3G手机(优 ...

  4. (转)模板引擎类dedetemplate.class.php使用说明

    1.概述 织梦的模板标签类似于XML格式,所有的模板都含有定界符,默认情况下是{dede:*}和{/dede:*},“*”代表模板标记名称. 一般情况下{dede:*}和{/dede:*}是成对出现的 ...

  5. android6.0源码分析之Camera API2.0下的Capture流程分析

    前面对Camera2的初始化以及预览的相关流程进行了详细分析,本文将会对Camera2的capture(拍照)流程进行分析. 前面分析preview的时候,当预览成功后,会使能ShutterButto ...

  6. drop table xx purge

    drop table xx purge; 说明: 所有删除的表都会在回收站里面,只有后面加上purge才是彻底的清空表. (一般用于测试.练习数据表,所以最好不要带purge,要不误删就找不到了.)

  7. dbms_job dbms_scheduler简单比较

    ---------------------------陈旧的-------------------------------------/*--------------------- 创建job --- ...

  8. openssl提取pfx证书密钥对

    刚做银联的项目,对方给了1.pfx和1.cer两个测试文件,总结一下利用这两个文件提取出文本 银联提供两个测试证书  1.pfx 和 1.cer . 其中 pfx证书包含RSA的公钥和密钥;cer证书 ...

  9. Smarty中{literal}的使用详解

     {literal} <script>function Login(){ document.LoginForm.submit();}</script>{/literal} == ...

  10. PHP实现动态生成饼状图 (转载)

    <?php //变量定义,画椭圆弧时的角度大小 define("ANGLELENGTH", 10); /** * 绘制图片 * @param $title 3D图的标题 * ...