原题: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. Camera2Raw

    This sample demonstrates how to use the Camera2 API to capture RAW camera buffers and save them as D ...

  2. mui.pushToRefresh组件下拉回调函数中this指向问题

    先看一段代码 (function($) { //阻尼系数 var deceleration = mui.os.ios ? 0.003 : 0.0009; $('.mui-scroll-wrapper' ...

  3. IDL实现主成分变化(PCA)

    IDL只能通过调用envi的二次接口做图像的变换,但是对于普通的数据没有提供函数.根据主成分变换的原理,用IDL写出来了,这样就不用每次再去用matlab的princomp去做了.主成分变化的基本过程 ...

  4. 修改Calendar(梅花雨)日历控件 兼容IE9 谷歌 火狐

    修改Calendar日历控件 兼容IE9,谷歌,火狐. 只是能用,出现的位置有所不同,希望有高手再帮我改改吧,谢谢   一. [javascript]   this.iframe     = wind ...

  5. css3响应式布局

    响应式布局 分栏布局,-webkit-column-width(定义每栏的宽度,会根据每栏宽度自动分成若干栏) <style> .wrap {width: 900px; border: 1 ...

  6. JavaScript ArrayBuffer浅析

    时隔一年半,再次来到博客园.回首刚接触前端时所写的两篇随笔,无法直视啊~ --------------------------------------------------------------- ...

  7. spring-data-mongodb查询结果返回指定字段

        方法1 DBObject dbObject = new BasicDBObject(); dbObject.put("status", 1); DBObject field ...

  8. FFMPEG 截取RTMP直播流图片命令

    CentOS 6.5  yum安装FFMPEG步骤 1. 手动添加yum源配置 vi /etc/yum.repos.d/dag.repo   [dag] name=Dag RPM Repository ...

  9. C语言的printf输出格式控制

    C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法( ...

  10. C++普通函数与模板函数以及特化函数重载的优先级问题

    在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编 ...