您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: