UVA - 196 Spreadsheet
2014-10-16 22:37
281 查看
题目大意:输出表格内的值
解题思路:表格的数据可以按照二维数组存放,然后根据相应的字符串来找到相应的位置,数字也存放在二维数组里,这样可以一一对应,根据要求的表达式,当遇到+号或者到末尾的时候,就调用函数进行相加
解题思路:表格的数据可以按照二维数组存放,然后根据相应的字符串来找到相应的位置,数字也存放在二维数组里,这样可以一一对应,根据要求的表达式,当遇到+号或者到末尾的时候,就调用函数进行相加
#include<cstdio> #include<string> #include<cstdlib> #include<cctype> #include<iostream> #include<cstdlib> #include<cstring> #define MARK -2147483645 using namespace std; int num[1010][1010]; string str[1010][1010]; int dfs(int x, int y){ if(num[x][y] != MARK) return num[x][y]; if(num[x][y] == MARK ) { int row = 0; int col = 0; string str1 = str[x][y]; num[x][y] = 0; for(int i = 1; i <= str1.size() + 1 ; i++) { if(str1[i] >= '0' && str1[i] <= '9') row = row * 10 + str1[i] - '0'; else if(str1[i] >= 'A' && str1[i] <= 'Z') col = col * 26 + str1[i] - 'A' + 1; else if(str1[i] == '+' || i == str1.size()) { num[x][y] += dfs(row,col); row = col = 0; } } return num[x][y]; } return 0 ; } int main() { int test; scanf("%d", &test); while(test--) { int m , n; memset(num,0,sizeof(num)); scanf("%d %d", &m, &n); for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) { cin >>str[i][j]; if(str[i][j][0] == '=') num[i][j] = MARK; else num[i][j] = atoi(str[i][j].c_str()) ; } for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) if(num[i][j] == MARK) dfs(i,j); int j; for(int i = 1; i <= n; i++) { for( j = 1; j < m; j++) printf("%d ",num[i][j]); printf("%d\n", num[i][j]); } } return 0; }
相关文章推荐
- UVA196-Spreadsheet(拓扑排序)
- UVA 196 - Spreadsheet
- uva 196 - Spreadsheet
- uva196 Spreadsheet
- UVa 196 Spreadsheet
- UVA 196 Spreadsheet 解题报告
- uva196 - Spreadsheet(电子表格)
- uva 196 Spreadsheet(拓扑排序+DFS)
- uva 196 - Spreadsheet
- UVa 196 - Spreadsheet
- UVA_196_Spreadsheet
- uva 196 Spreadsheet(电子表格)
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- uva 196 Spreadsheet
- UVA 196 Spreadsheet
- uva 196 - Spreadsheet
- UVa 196 Spreadsheet
- 【uva-196】Spreadsheet (拓扑排序)妈呀居然过了
- uva 196 Spreadsheet 拓扑排序 。坑爹的一题
- 196 - Spreadsheet(dfs)