电子表格
链接
Spreadsheet
问题描述

1979年,Dan Bricklin和Bob Frankston编写了VisiCalc,这是第一个电子表格应用程序。它取得了巨大的成功,在当时,它是Apple II电脑的杀手级应用程序。如今,电子表格在大多数台式电脑上都能找到。 电子表格背后的想法非常简单,尽管很强大。电子表格由一个表格组成,其中每个单元格包含一个数字或公式。公式可以计算依赖于其他单元格值的表达式。可以添加文本和图形以进行演示。 您将编写一个非常简单的电子表格应用程序。你的程序应该接受几个电子表格。电子表格的每个单元格都包含一个数值(仅限整数)或一个公式(仅支持和)。计算完所有公式的值后,程序应输出结果电子表格,其中所有公式已被其值替换。 图:左上角单元格的命名

输入

输入文件的第一行包含要遵循的电子表格数。电子表格以两个整数组成的行开始,用空格隔开,给出列和行的数目。电子表格的以下行各包含一行。一行由该行的单元格组成,由一个空格分隔。

单元格由数字整数值或公式组成。公式以等号(=)开头。之后,一个或多个单元格名称将跟随,并用加号(+)分隔。此公式的值是在引用单元格中找到的所有值的总和。这些单元格可能再次包含公式。公式中没有空格。

您可以安全地假设单元之间没有循环依赖关系。所以每个电子表格都可以完全计算出来。
单元格的名称由列的1到3个字母和行的1到999(包括)之间的数字组成。该列的字母组成以下系列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、…、BZ、CA、…、ZZ、AAA、AAB、…、AAZ、ABA、…、ABZ、ACA、…、ZZZ。这些字母对应于从1到18278的数字。左上角的单元格名为A1。见图。

输出
程序的输出格式应与输入格式相同,只是不重复电子表格的数目以及列和行的数目。此外,所有公式都应替换为其值。

思路

就是这样的,先设置一个结构体,存放输入的每一位字符,前面单纯的数字也当做字符输入,是为了后面A1这一类的字符容易存放,以及提取,结构体中再定义一个整数用来存放对应的数字(由前面输入的字符串转化而来的,包括公式)

定义一个结构体类型的二维数组(数组下标就是每个数字对应的坐标),然后主函数里面,输入数据字符串,在数组里面存放好,然后,(我写了一个函数,我觉得看的更清楚)这个函数就是用来转化字符串为具体数字,最主要的就是这个函数,

转换思路:

将有字母的和没有字母的分开转化,由题意可知,公式的第一个字符是"="因此我只需要判断传入的字符串的第一个是不是等号就行了,数字转换肯定知道,主要就是字母转化,比如A1这个是不是可以看做是一个坐标(1,1),我得到一个坐标(也就是当字符串A1+B1循环进行到“+”的时候既不是字母又不是数字,将坐标再次传入函数得到其对应的数据存入返回的数据ans中)进而得到公式的具体值。
最后再说一点,就是标记,避免不必要的重复。

# include <stdio.h>
# include <string.h>
struct c
{char a[1000];//存放输入字符int num;//对应数字
}s[1000][1000];
int used[1000][1000];//标记
int num (int z,int x)
{if(used[z][x]!=0)return s[z][x].num;int l=strlen(s[z][x].a),ans=0;if(s[z][x].a[0]!='='){for(int i=0;i<l;i++){ans=ans*10+s[z][x].a[i]-'0';}return ans;}else {int k=0,j=0;for(int i=1;i<=l;i++){if(s[z][x].a[i]>='A'&&s[z][x].a[i]<='Z'){k=k*26+(s[z][x].a[i]-'A'+1);}else if(s[z][x].a[i]>='0'&&s[z][x].a[i]<='9'){j=j*10+s[z][x].a[i]-'0';}else{ans+=num(j,k);j=0;k=0;}}return ans;}
}
int main()
{int n;scanf("%d",&n);while(n--){int x,y;scanf("%d %d",&x,&y);for(int i=1;i<=y;i++){for(int j=1;j<=x;j++){// used[i][j]=1;scanf("%s",&s[i][j].a);// s[i][j].num=num(i,j);}}for(int i=1;i<=y;i++){for(int j=1;j<=x;j++){//scanf("%s",&s[i][j].a);s[i][j].num=num(i,j);used[i][j]=1;}}for(int i=1;i<=y;i++){for(int j=1;j<x;j++){printf("%d ",s[i][j].num);}printf("%d\n",s[i][x].num);}memset(used,0,sizeof(used));} } 

其实呢,我这个做法不算是正解,虽然在杭电过了,,范围再大一点,肯定就超了。还是用拓扑排序更好,,但是,能力有限,,,还没搞懂,,就先用递归做了,,

Spreadsheet相关推荐

  1. UVa512 - Spreadsheet Tracking

    题意:给出一个表格的行数和列数,及一系列的插入行,删除行,插入列,删除列,单元格交换操作,然后给出系列的查询,问初始的单元格新的位置 思路:如果删除的行或者删除的列在查询的行或者列之前,则对应的行或者 ...

  2. Spreadsheet Tracking

    原题及翻译 Data in spreadsheets are stored in cells, which are organized in rows ® and columns ©. 电子表格中的数 ...

  3. UVA 512 Spreadsheet Tracking

    题目链接:https://vjudge.net/problem/UVA-512 题目翻译摘自<算法禁赛入门经典> 题目大意 有一个 r 行 c 列(1 ≤ r,c ≤ 50)的电子表格,行 ...

  4. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)

    本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...

  5. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)

    大意 输入:r(行)c(列)n(种操作)m(个行/列),给出具体行/列 x(个坐标),给出具体坐标. 输出:m个坐标经过n种操作后分别移动到了哪里. 注意:所有操作都是根据原始表进行的,如:1,2,3 ...

  6. 【CodeForces - 777C】Alyona and Spreadsheet(思维,前缀和)

    题干: During the lesson small girl Alyona works with one famous spreadsheet computer program and learn ...

  7. php Spreadsheet 导出,PhpSpreadsheet 导出Excel

    /** * Excel 助手 * sudo composer require phpoffice/phpspreadsheet */ namespace CommonUtil; use PhpOffi ...

  8. java sheet 打印区域设定,如何使用Java设置电子表格的打印区域。(How to set the print area of a spreadsheet using Java.)...

    如何使用Java设置电子表格的打印区域.(How to set the print area of a spreadsheet using Java.) 问题描述 (Problem Descripti ...

  9. UVA - 512 ​​​​​​​Spreadsheet Tracking

    Spreadsheet Tracking UVA - 512 题目传送门 紫书第二个思路十分巧妙,能用很少的代码解出此题. AC代码: #include <cstdio> #include ...

  10. Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表

    题目链接:http://codeforces.com/contest/777/problem/C C. Alyona and Spreadsheet time limit per test 1 sec ...

最新文章

  1. 9.DRN: A Deep Reinforcement Learning Framework for News Recommendation论文详解
  2. 云时代看CRM如何引领企业成功?
  3. 在解决方案中所使用 NuGet 管理软件包依赖
  4. WinPcap编程入门实践
  5. 报告解读丨基于消费者洞察的鞋服品牌数字化营销新思路
  6. jquery使用技巧总结
  7. 在何时该用什么方式编译WinCE
  8. 你知道 Java 类是如何被加载的吗?
  9. java上传excel文件代码,求java把上传文件的excel表中数据存入数据库中.实现录入的代码?...
  10. 苹果网页归档转html,常用JS转换HTML转义符
  11. fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached
  12. POJ 2993 Emag eht htiw Em Pleh(模拟)
  13. 破局:滚动率知识在信贷风控中的系统总结
  14. [MS评估文档]SharePoint Portal Server 2003 的 10 大优点
  15. TensorFlow 还是 PyTorch?哪一个才更适合编写深度神经网络?
  16. [转]VC6 STLport-5.1.4 编译 安装
  17. ansible笔记(4):常用模块之文件操作
  18. jQuery 追加元素的方法如append、prepend、before,after(转)
  19. 关于新版本Firefox浏览器无法使用firebug与firepath问题的解决方案
  20. oracle可以导出mdf,sql数据库导出mdf

热门文章

  1. Hadoop3.x版本安装及其应用部署
  2. 压缩文件服务器返回出错,解压缩多部分文件 - 错误的zipfile偏移量(本地头信号):4...
  3. 计算机网络有客户 服务器和对等模式,四种网络工作模式有:对等模式、客户/服务器模式以及( )、( ),...
  4. Vinted运营干货分享:Vinted国内使用详细步骤参考
  5. 安检x光机原理计算机实现,安检X光机组成及工作原理(图文)
  6. 伊利洛伊大学厄巴纳-香槟分校计算机专业,申请伊利诺伊大学香槟分校计算机科学专业需要具备哪些条件?看完文章你就清楚了...
  7. 矩阵连乘 动态规划_如何构建移动营销时代的“动态矩阵”?
  8. matlab矩阵a(8),在matlab中对矩阵A的第2行第1列赋值为8可用A(1,2)=8表示。()
  9. 保存数据时报:Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
  10. java单元测试如何全覆盖_java-覆盖测试