零、前言
本篇为个人蓝桥杯加练题解,有不足之处,敬请指出。
一、英文字母
原题链接:英文字母
1、问题描述
输入一个正整数 n, 输出第 n 个大写英文字母。
输入格式
输入一行包含一个正整数 n 。
输出格式
输出一行包含一个字母。
样例输入 1
12
样例输出 1
L
样例输入 2
17
样例输出 2
Q
评测用例规模与约定
对于所有评测用例, 1≤n≤26 。
2、解题思路
利用数字与字母的ASCII码关系,即可实现该题。
3、AC代码
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<(char)(n+64)<<endl; (1)
return 0;
}
4、算法解析
- (1) 因为字母和数字是不同类型的,需要强制转换一下
本题时间复杂度和空间复杂度都为 O(1)
二、单词分析
原题链接:单词分析
1、题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
示例 1
输入
lanqiao
输出
a
2
示例 2
输入
longlonglongistoolong
输出
o
6
运行限制
最大运行时间:1s
最大运行内存: 256M
2、解题思路
要统计每一个小写字母的出现次数,可以用数组将每个字母出现的次数都依次记录下来,之后比较每个字母出现的频率即可。
3、AC代码
#include <iostream>
using namespace std;
int main()
{
int zm[26] ={0},cnt = 0; //(1)
char ch;
while((ch = getchar()) != '\n') //(2)
{
zm[ch-'a']++;
}
for(int i = 1;i<26;i++) //(3)
{
if(zm[i]>zm[cnt])
cnt = i;
}
printf("%c\n%d",cnt+'a',zm[cnt]);
return 0;
}
4、算法解析
- (1) 建立26位大小的数组,用于存储每个字母出现的频率,cnt用于记录字母出现最多的次数。
- (2) 依次输入每一个非空字符,用将其转换为十进制数存储进数组中
- (3) 遍历数组,找出出现次数最多且字典序小的字母
本题的时间复杂度为:O(n+26)
空间复杂度为:O(26);
三、火星旅行
原题链接:火星旅行
1、题目描述
火星的所有空间站都位于一个圆上,Byteazar 在其中一个空间站登陆然后开始绕圈旅行。旅行需要耗费油料,一升油料只能跑
1 米,每个空间站可以补给的油料都有所不同。
Byteazar 每到一个空间站便可以把该空间站的油料全部拿走(他的油箱是没有容量限制的)。但是如果走到某个时候突然没油了那么旅行便失败了。
Byteazar 需要决定要在哪个地方登陆使得他能顺利访问完所有的空间站后回到他当初登陆的地方,他登陆后可以选择两个方向中的任意一个进行旅行。
输入描述
第一行一个整数 n,代表空间站数量,所有空间站由 1 至 n 进行标号。
之后 n 行,每行两个整数pi ,di ,第 i+1 行描述了第 i 号空间站的信息,其中 pi 表示该空间站可以补给的油量,di则指明了它到 i+1 号空间站的距离,对于 n 号空间站,di表示它和 1 号空间站的距离。
其中,3≤n≤106,
pi≥0,di>0,∑di≤2×109。
输出描述
输出 n 行,每行一个字符串TAK
或NIE
。
若你认为在 i 号空间站登陆是可行的,则需要在第 i 行输出TAK
,否则输出NIE
。
示例 1
输入
5
3 1
1 2
5 2
0 1
5 4
输出
TAK
NIE
TAK
NIE
TAK
运行限制
最大运行时间:1s
最大运行内存: 128M