【蓝桥】第八届C语言C组第7题 Excel地址(进制变形题,stack()简单使用)转载
标题: Excel地址
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
…
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。
例如,
输入:
26
则程序应该输出:
Z
再例如,
输入:
2054
则程序应该输出:
BZZ
我们约定,输入的整数范围[1,2147483647]
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
笨笨有话说:
这有点像进制关系,又不完全是。好像末2位是以1当26,末3位是以1当26*26
歪歪有话说:
要是从字母序列转数字还好点,倒过来有点麻烦,不过计算机跑得快啊。
分析:
1.乍一看,像是10进制转26进制的题目,细心一琢磨,实际上这种表示方法比真实的26进制表示要多表示些内容。
2.通常的一个进制数都是有0的,这里的表示方法中也可以把A当成零,但当Z进位是到AA时,而不是直接进位到BA,这样应该就能看出来确实比一般理解的26进制多表示了一些数。
3.或者这么理解,拿16进制举例,F是15,我们假设G为16,且没有0了,那么此时十进制16的十六进制就是一个G,十进制17的十六进制是11。(要是一时理解不了,多写几个连续数转换一下,可能就捋清楚关系了)
解法1:
先来一个常见的十进制转十六进制代码对比示例:
主要分析下代码1的 n/=16; 和代码2 a=(a-yushu)/26; 的不同。
代码1:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n;
char a[6]={'A','B','C','D','E','F'};
cin>>n;
stack<char> b;
if(!n) cout<<n;
while(n)
{
int c=n%16;
if(c>=10)
{
b.push(a[c-10]);
}
else
b.push(c+'0');
n/=16;//由于标准16进制没有一个符号单独表示16,
//这里直接除16就好了,这是和下面代码2的关键不同之处。
}
while(!b.empty())
{
cout<<b.top();
b.pop();
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
代码2:(内容来源于此链接(https://www.cnblogs.com/jweie/p/8371168.html) )
#include <iostream>
using namespace std;
int main()
{
long long a;
int yushu;
int b[100];
cin>>a;
int i=0;
while(a)
{
yushu=a%26;
if(yushu==0)yushu=26;
a=(a-yushu)/26;//这里主要是对于a是26的倍数进行处理,这里也是和一般进制转换不同的关键之处
//常规的26进制数是没有符号表示26的,这里的Z实际就是26,当a取模的结果是0时,也就是26,且不用进位了,
//故在这里做除法时减去了余数(当余数是26时才有作用,别的数就算不减去也会在整数除法计算中被当成小数舍去)
b<span class="token punctuation">[</span>i<span class="token operator">++</span><span class="token punctuation">]</span><span class="token operator">=</span>yushu<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">>=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">--</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%c"</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">+</span><span class="token string">'A'</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
代码3:(对于代码1的stack()函数简单使用)
#include <iostream>
#include <stack>
using namespace std;
int main()
{
<span class="token keyword">int</span> a<span class="token punctuation">;</span> cin<span class="token operator">>></span>a<span class="token punctuation">;</span>
stack<span class="token operator"><</span><span class="token keyword">char</span><span class="token operator">></span> st<span class="token punctuation">;</span>
<span class="token keyword">while</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">int</span> x<span class="token operator">=</span>a<span class="token operator">%</span><span class="token number">26</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> x<span class="token operator">=</span><span class="token number">26</span><span class="token punctuation">;</span>
a<span class="token operator">=</span><span class="token punctuation">(</span>a<span class="token operator">-</span>x<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">26</span><span class="token punctuation">;</span>
st<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">'A'</span><span class="token operator">+</span>x<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>st<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
cout<span class="token operator"><<</span>st<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
st<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
解法2(学长代码,换一个思路看问题)
大体思路是,把每次进位的上限值放入数组val[i],从个位十位百位依次向高位处理,输入值n与各个位数上限val[i]做取模运算,并用数组ch[i]存储在每个位数上a取模的值,这里没有除法运算,直接减去上限val[i]即可。
(不明白可以提问我,当然可能你看到这篇文章时,我已经发表了很久了,久到我都忘了我发过什么了
【蓝桥】第八届C语言C组第7题 Excel地址(进制变形题,stack()简单使用)转载的更多相关文章
- 递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题
原创 标题:递增三元组 给定三个整数数组A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN],请你统计有多少个三元组(i, ...
- [NOIP2006] 提高组 洛谷P1066 2^k进制数
题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...
- 发现环——第八届蓝桥杯C语言B组(国赛)第四题
原创 标题:发现环 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台 电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管 ...
- 希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题
原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...
- 磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题
原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...
- 螺旋折线——第九届蓝桥杯C语言B组(省赛)第七题
原创 如图p1.png所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0, 1)=3, ...
- 一步之遥——第七届蓝桥杯C语言B组(国赛)第一题
原创 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按 ...
- 蓝桥第八届省赛 javaB组承压计算
X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同.金属材料被严格地堆放成金字塔形. 7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 ...
- 乘积尾零——第九届蓝桥杯C语言B组(省赛)第三题
原创 标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7 ...
随机推荐
- Python 爬取 热词并进行分类数据分析-[简单准备] (2020年寒假小目标05)
日期:2020.01.27 博客期:135 星期一 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备](本期博客) b.[云图制作+数据导入] ...
- Mac OS删除文件夹和文件的命令
https://www.jianshu.com/p/0376bf0514e3 2017.08.18 17:27* 字数 219 阅读 16709评论 0喜欢 0 rmdir删除空目录,不过一旦目录非空 ...
- 笔记-JavaScript与HTML DOM
引用源:https://www.cnblogs.com/propheterLiu/p/5966791.html 笔记-JavaScript和HTML DOM 区别: javascript JavaSc ...
- 如何搭建OWASP测试靶机
刚刚入门的新手都需要一个可以用来练习的环境,但是dvwa的搭建需要相关环境,所以这里推荐大家在虚拟机上搭建owasp靶机,里面集成了dvwa靶机. https://sourceforge.net/pr ...
- Django中的prefetch_related()函数优化
对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化 prefetch_related()和select_related()的设计目的 ...
- 【原】Web Polygraph 安装
1.下载 # wget http://www.web-polygraph.org/downloads/srcs/polygraph-4.3.2-src.tgz 2.解压 # tar zxvf poly ...
- 【 JdbcUtils 】mysql数据库查询
JdbcUtils package k.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; i ...
- luogu P4013 数字梯形问题
三倍经验,三个条件,分别对应了常见的3种模型,第一种是限制每个点只能一次且无交点,我们可以把这个点拆成一个出点一个入点,capacity为1,这样就限制了只选择一次,第二种是可以有交点,但不能有交边, ...
- Flask 教程 第二十三章:应用程序编程接口(API)
本文翻译自The Flask Mega-Tutorial Part XXIII: Application Programming Interfaces (APIs) 我为此应用程序构建的所有功能都只适 ...
- 写给想要入门python或者正在入门python的小朋友们
写在前面: 最近好像python挺火,虽然我也在天天写python,但是python毕竟是动态语言,就拿常被人吐槽的java来说,python绝大不多数地方是不如java的.python只能是你的一个 ...