• 作者: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(电子表格) 题解 模拟的更多相关文章

  1. Blocked Billboard II题解--模拟到崩溃的模拟

    前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...

  2. CF1B Spreadsheets

    题意翻译 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统: 第一列被标为A,第二列为B,以此类推,第26列为Z.接下来为由两个字母构成的列号: 第27列为AA,第28列为AB... ...

  3. PAT甲级1017题解——模拟排序

    题目分析: 本题我第一次尝试去做的时候用的是优先队列,但是效率不仅代码量很大,而且还有测试样例过不去,很显然没有找到一个好的数据结构来解决这道题目(随着逐渐的刷PAT甲级的题会发现有时选择一个好的解题 ...

  4. 洛谷P5020 货币系统 题解 模拟

    题目链接:https://www.luogu.org/problem/P5020 这道题目是一道模拟题,但是又有一点多重背包的思想在里面. 首先我们定义一个 vis[i] 来表示和为 i 的情况在之前 ...

  5. 洛谷P5019 铺设道路 题解 模拟/贪心基础题

    题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...

  6. 洛谷 P2482 loj #2885 [SDOI2010]猪国杀 题解【模拟】【贪心】【搜索】

    好玩的模拟题. 以后要经常写模拟题鸭 题目描述 游戏背景 <猪国杀>是一种多猪牌类回合制游戏,一共有\(3\)种角色:主猪,忠猪,反猪.每局游戏主猪有且只有\(1\)只,忠猪和反猪可以有多 ...

  7. Codeforces Round #271 (Div. 2)题解【ABCDEF】

    Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...

  8. 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 ...

  9. 【bzoj1150】[CTSC2007]数据备份Backup 模拟费用流+链表+堆

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...

随机推荐

  1. WPF数据绑定详解

    元素绑定 数据绑定最简单的形式是,源对象是WPF元素而且源属性是依赖属性.依赖项属性具有内置的更改通知支持,当在源对象中改变依赖项属性的值时,会立即更新目标对相中的绑定属性. <!--Xaml程 ...

  2. 如何在不卸载原来jdk1.8的情况下切换到jdk1.7

    将Path环境变量中的JAVA_HOME变量中写入现在的JDK1.7路径即可.

  3. 文件下载工具类 DownLoadUtil 实战

    package com.cloud.mina.util; import java.io.File; import java.io.FileInputStream; import java.io.IOE ...

  4. 地不安装Oracle,plsql远程连接数据库

    由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...

  5. PHPCMS快速建站系列之getcache()的用法

    /** * 读取缓存,默认为文件缓存,不加载缓存配置. * @param string $name 缓存名称 * @param $filepath 数据路径(模块名称) caches/cache_$f ...

  6. Nginx教程(7) 正向代理与反向代理【总结】 (转)

    1.前言 最近工作中用到反向代理,发现网络代理的玩法还真不少,网络背后有很多需要去学习.而在此之前仅仅使用了过代理软件,曾经为了访问google,使用了代理软件,需要在浏览器中配置代理的地址.我只知道 ...

  7. javascript如何将时间戳转为24小时制

    var now = new Date(parseInt(1446634507) * 1000);console.log(now.toLocaleString('chinese',{hour12:fal ...

  8. JS放在body与head中的不同

    放在body和head其实差不多的,只不过是文档解析的时间不同.浏览器解析html是从上到下的.如果把javascript放在head里的话,则先被解析,但这时候body还没有解析,所以$(#btn) ...

  9. Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离

    给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(Tr ...

  10. 使用PHP类TCPDF生成PDF文档

    转自:http://www.blhere.com/1180.html 这两天遇到一个项目中,需要php自动处理生成pdf文档.在网上找了好几个类,最后决定使用TCPDF,使用的时候真是发现这个类真是强 ...