• 作者: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. GitHub的注册与使用

    1. 注册账号: 地址: https://github.com/输入账号.邮箱.密码,然后点击注册按钮. 2. 初始设置 注册完成后,选择Free免费账号完成设置 3.验证账号 新建一个仓库 发现邮箱 ...

  2. excel怎么并排查看两个工作表

    excel怎么并排查看两个工作表 excel怎么并排查看两个工作表?excel打开一个窗口想要同时查看两个工作表中的数据,类似于word中的分栏效果,该怎么实现呢?EXCEL是一个使用最多的办公软件, ...

  3. JavaScript--封装好的运动函数+旋转木马例子

    封装好的运动函数: 1.能控制目标元素的多种属性 2.能自动获取元素的样式表: 3.获取样式函数兼容 4.能对于元素的多属性进行动画(缓动动画)修改 5.能区分透明度等没单位的属性和px属性的变化 a ...

  4. C语言获当地时间

    代码如下: #include <stdio.h> #include <time.h> #define DEBUGE 1 int main(void) { time_t rawt ...

  5. 大数据技术之Hadoop入门

      第1章 大数据概论 1.1 大数据概念 大数据概念如图2-1 所示. 图2-1 大数据概念 1.2 大数据特点(4V) 大数据特点如图2-2,2-3,2-4,2-5所示 图2-2 大数据特点之大量 ...

  6. Inno Setup 设置开机启动

    案1: 将快捷方式添加到“启动”文件夹 [Tasks] Name: "startupicon"; Description: "{cm:CreateQuickLaunchI ...

  7. js函数易犯的错误

    1.定义一个js函数时不能写在另一个函数里面. 2.定义一个打开网页自动执行的函数,一定要注意加载的顺序.如果是不是自动执行的,而是等页面加载完后事件触发的,那写在任何地方都没问题. 错误的:

  8. iOS 多个精致动画

    iOS 多个精致动画  http://www.cocoachina.com/bbs/read.php?tid=301262 iOS 零碎小知识     http://www.cocoachina.co ...

  9. LeetCode107 Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  10. linux环境变量设置和默认执行语句设置

    环境变量设置 1.export export ORACLE_HOME=/usr/local/instantclient_12_2export PATH=$ORACLE_HOME:$PATHexport ...