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)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...
随机推荐
- WPF style 换肤
原文地址:http://www.cnblogs.com/DebugLZQ/p/3181040.html 原作者:DebugLZQ UI的风格一致性是应用程序应当关注的重要特性. 1.Creating ...
- python实现统计字符类型
#字符串处理统计类型def my_func(*str): list_num = [] list_big = [] list_small = [] list_qt = [] str = input('请 ...
- PHP数据加密和解密
encrypt.php <?php /** * Passport 加密函数 * * @param string 等待加密的原字串 * @param string 私有密匙(用于解密和加密) * ...
- 获得CSM(Certified Scrum Master)-价值驱动交付。
2019年越来越多的企业开始实行敏捷转型,紧随时代潮流,学习最先进的科学管理方法,找到正确的人(团队),为企业交付高价值的产品服务. 导师Ethan ,培训的课程让人收益匪浅,活到老学到老,丰富的知识 ...
- linux系统 (实验二)实验楼的课程笔记
who am i 打印用户名和终端 终端的启动时间 whoami 打印用户名 who 命令其它常用参数 参数 说明 -a 打印能打印的全部 -d 打印死掉的进程 -m 同am i,mom li ...
- Leetcode680.Valid Palindrome II验证回文字符串2
给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: ...
- 基于jQuery,bootstrap的bootstrapValidator的学习(一)
bootstrap:能够增加兼容性的强大框架. 因为移动端项目需要数据验证,就开始学习了bootstrapValidator . 1.需要引用的文件: css: bootstrap.min.css b ...
- iOS viewDidLayoutSubviews,viewdidload
由于种种原因,最近才开始真正在新项目中使用autolayout,使用过程中虽说是比较顺畅,但是也遇到了一些麻烦,比如: 我使用的XIB默认是4寸屏幕,我再XIB中增加一个viewA,宽度为320,约束 ...
- Java练习 SDUT-2271_Eddy的难题
Eddy的难题 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全 ...
- hdu1730 尼姆博弈
抽象一下把距离当做石子个数.虽然在这里石子个数可以增加,但是不管怎么增加,不会影响结果,因为你增加了,必须会有减少的. 所以类似取石子,观察平衡状态,如果(x2-x1-1)^...==0,必输. wa ...