CF1B.Spreadsheets(电子表格) 题解 模拟
- 作者:zifeiy
- 标签:模拟
题目出处:Spreadsheets
题目描述
在流行的电子表格系统中(例如,在Excel中),使用如下计算方式来对列号进行计算。
第1列对应A,第2列对应B,……,第26列对应Z。然后使用两个大写英文字母来表示列:第27列对应AA,第28列对应AB,第52列对应AZ,……,在ZZ之后,使用三个大写英文字母来表示列,如是循环……
行号由以1开头的整数进行标记。单元格的名称是列号和行号的连接。举个例子,BC23是位于第55列,第23行的单元格的名称。
有时我们使用另一种计算方式来表示单元格名称:RXCY,其中X和Y是整数,分别表示行号和列号。举个例子,R23C55 是上述的单元格名称的另一种表示。
你的任务是编写一个程序,读取给定的单元格坐标名称的计算方式,并且根据该计算方式得到另一种计算方式。
输入格式
输入的第一行包含一个整数 \(n(1 \le n \le 10^5)\) ,用于表示测试数据的组数。接下来 \(n\) 行每行包含一个字符串,用于表示一种计算方式的表述。所有描述计算方式的字符串都没有多余的空格并且它表述的单元格的实际行号和列号都不会超过 \(10^6\) 。
输出格式
输出 \(n\) 行,每行包含该单元格的计算方式对应的另一种计算方式。
样例输入
2
R23C55
BC23
样例输出
BC23
R23C55
题目分析
这道题目是一道很好的模拟题,它模拟了电子表格的列号。
我们可以将列号的字符串表示想象成一个进制数,但是在确定进制数之前,我们需要知道它占用了多少位。
首先转换成“AA..A”的形式,然后它就是一个26进制数了。(这里的解释有些简略,有时间再补充)
代码解释:
check()
函数用于确定电子表格是哪种计算方式;c2s()
用于将列号对应的整数c转换成字符串s;s2c()
用于将列号对应的字符串s转换成整数c。
另外,从字符串中提取出行号和列号,也是需要好好处理的细节。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
char ch[110], s[110];
int T, r, c;
bool check() { // 如果ch为“R23C55”格式则返回true,否则返回false
for (int i = 1; ch[i]; i ++)
if (isdigit(ch[i-1]) && ch[i] == 'C')
return true;
return false;
}
void c2s() { // 将数值c转换成字符串s
int i, t = 1;
for (i = 0; t <= c; i++, t *= 26) {
s[i] = 'A';
c -= t;
}
s[i] = '\0';
for (int i = 0; c > 0; i ++) {
s[i] += c % 26;
c /= 26;
}
strrev(s);
}
void s2c() { // 将字符串s转换成数值c
c = 0;
int len = strlen(s);
int t = 1;
for (int i = 0; i < len; i ++) {
c += t;
t *= 26;
}
t = 1;
for (int i = len-1; i >= 0; i --) {
c += (s[i] - 'A') * t;
t *= 26;
}
}
int main() {
cin >> T;
while (T --) {
cin >> ch;
if (check()) {
sscanf(ch, "R%dC%d", &r, &c);
//printf("r = %d , c = %d\n", r, c);
c2s();
printf("%s%d\n", s, r);
}
else {
int i;
for (i = 0; isupper(ch[i]); i ++);
strncpy(s, ch, i);
s[i] = '\0';
sscanf(ch+i, "%d", &r);
//printf("s = %s , r = %d\n", s, r);
s2c();
printf("R%dC%d\n", r, c);
}
}
return 0;
}
CF1B.Spreadsheets(电子表格) 题解 模拟的更多相关文章
- Blocked Billboard II题解--模拟到崩溃的模拟
前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...
- CF1B Spreadsheets
题意翻译 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统: 第一列被标为A,第二列为B,以此类推,第26列为Z.接下来为由两个字母构成的列号: 第27列为AA,第28列为AB... ...
- PAT甲级1017题解——模拟排序
题目分析: 本题我第一次尝试去做的时候用的是优先队列,但是效率不仅代码量很大,而且还有测试样例过不去,很显然没有找到一个好的数据结构来解决这道题目(随着逐渐的刷PAT甲级的题会发现有时选择一个好的解题 ...
- 洛谷P5020 货币系统 题解 模拟
题目链接:https://www.luogu.org/problem/P5020 这道题目是一道模拟题,但是又有一点多重背包的思想在里面. 首先我们定义一个 vis[i] 来表示和为 i 的情况在之前 ...
- 洛谷P5019 铺设道路 题解 模拟/贪心基础题
题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...
- 洛谷 P2482 loj #2885 [SDOI2010]猪国杀 题解【模拟】【贪心】【搜索】
好玩的模拟题. 以后要经常写模拟题鸭 题目描述 游戏背景 <猪国杀>是一种多猪牌类回合制游戏,一共有\(3\)种角色:主猪,忠猪,反猪.每局游戏主猪有且只有\(1\)只,忠猪和反猪可以有多 ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列
A. Broken Clock time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 【bzoj1150】[CTSC2007]数据备份Backup 模拟费用流+链表+堆
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
随机推荐
- pycharm多行批量缩进和反向缩进快捷键
在 VS, PYCHARM 中只要 拉选块之后,按下tab键,整个块就会缩进 按下 shift + tab 就会反向缩进
- 2018-12-27-WPF-从文件创建图片的方法
title author date CreateTime categories WPF 从文件创建图片的方法 lindexi 2018-12-27 11:37:46 +0800 2018-12-27 ...
- js将canvas保存成图片并下载
<canvas id="canvas" width="400" height="400"></canvas> < ...
- Intersection of Two Linked Lists两链表找重合节点
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- PAT天梯赛L1-002 打印漏斗
题目链接:点击打开链接 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓"沙漏形 ...
- jquery 浏览器缓存网页
头部:<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate&q ...
- JDK 8 中包列表及介绍
了解了Java 8中所有包的作用,对Java 8有了一个整体的了解,另外也是提高了自身的阅读能力.本文列出了Java 8中所有的包,并且对每一个包的功能做了简要的说明,希望对你有所帮助. ------ ...
- iPhone 7 Plus 维修记 (一)(2019-08-07)
iPhone 7 Plus 维修记 问题 电池鼓包,屏幕已经被撑起,偶尔死机突然关机. 分析 初步分析是电池损坏. 维修 由于电池没有双易拉条需要将后壳加热后再取出电池. 更换电池后测试,发现电量一会 ...
- 基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)
数据质量决定运营分析的质量 在上文中,我们介绍了GrowthHacking的整体架构,其中数据采集是整个数据分析的基础,只有有了数据,才能进行有价值的分析:只有高质量的数据,才能驱动高质量的运营分析. ...
- 51nod 1686 第K大区间【离散化+二分】
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 定义一个区间的值为其众数出现的次数. 现给出n ...