Spreadsheet Calculator 电子表格计算器 (Uva 215)
原题: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)的更多相关文章
- UVA 215 Spreadsheet Calculator (模拟)
模拟题.每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复. 这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写 ...
- [LeetCode] Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- [LeetCode] 224. Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- 【229】Raster Calculator - 栅格计算器
参考:分段函数进行复制,利用语句 参考:ArcGIS栅格计算器 - CSDN 参考:ArcGIS栅格计算器con条件函数使用 参考:ArcGIS栅格计算器 - 电脑玩物 ("lyr" ...
- Basic Calculator 基本计算器
2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈 ...
- 224 Basic Calculator 基本计算器
实现一个基本的计算器来计算一个简单的字符串表达式. 字符串表达式可以包含左括号 ( ,右括号),加号+ ,减号 -,非负整数和空格 . 假定所给的表达式语句总是正确有效的. 例如: "1 + ...
- uva 215 hdu 1455 uvalive5522 poj 1011 sticks
//这题又折腾了两天 心好累 //poj.hdu数据极弱,找虐请上uvalive 题意:给出n个数,将其分为任意份,每份里的数字和为同一个值.求每份里数字和可能的最小值. 解法:dfs+剪枝 1.按降 ...
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- jsp学习---使用jsp和JavaBean实现超简单网页计算器
一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...
随机推荐
- 在一个UIView中如何使用多个UIPickerView
可以现在storyboard的UIView中拖入多个UIPickerView 然后同样是继承相关的UIPickerView协议 <UIPickerViewDataSource,UIPickerV ...
- CentOS 6.5断电后启动出现:unexpected inconsistency run fsck manully
CentOS 6.5断电后启动出现:unexpected inconsistency run fsck manully 如下图: 解决方法: 1.输入root用户的密码回车: 2.执行以下命令,修复磁 ...
- python中的generator, iterator, iterabel
先来看看如果遇到一个对象,如何判断其是否是这三种类型: from types import GeneratorType from collectiuons import Iterable, Itera ...
- jq之简单表单验证
<body> <form method="post" action=""> <div class="int"& ...
- (转)PHP正则表达式的快速学习方法
1.入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或 ...
- Android 开发笔记——对应用进行单元测试
在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,是正规Android开发的必用技术, 在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 第一 ...
- OC语法简写
NSNumber [NSNumber numberWithInt:666] 等价于 @666 [NSNumber numberWithLongLong:666ll] 等价于 @666ll [NSNum ...
- 【NOI2006】最大获利
[问题描述] 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU 集团旗下的CS&T 通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就 ...
- [ JS 进阶 ] 如何改进代码性能 (3)
原文链接 总结一下 1.减少操作dom的次数 2.需要多次使用某全局变量的时候,将其赋给一个局部变量,避免重复查找 3.优化循环 4.多用逗号和直接赋值的方式来var,减少工厂方式和构造函数方式创建对 ...
- ThinkInJava4读书笔记之第七章隐藏实施过程
第7章 多形性 上溯造型:将一个对象作为它自己的类型使用,或者作为它的基础类型的一个对象使用.取得一个对象句柄,并将其作为基础类型句柄使用. 方法调用的绑定:将一个方法调用同一个方法主体连接到一起就称 ...