A30957. 生成字母串英语老师要求学生按照如下规则写一串字母:- 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写;- 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写。例如 `aAaABCDdcbBC` 就是一个合法的字母串;而 `dEFfeFGhI` 就是非法的。本题就请你编写程序,自动生成一个合法的字母串。输入输入在第一行给出一个不超…
填空题
较易
知识点
题目描述
生成字母串
英语老师要求学生按照如下规则写一串字母:
- 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写;
- 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写。
例如 `aAaABCDdcbBC` 就是一个合法的字母串;而 `dEFfeFGhI` 就是非法的。
本题就请你编写程序,自动生成一个合法的字母串。
输入
输入在第一行给出一个不超过 10000 的正整数 N 和第一个字母。
随后一行给出一个由 `0` 和 `1` 组成的长度为 N 的字符串。
这个串给出了字母串的生成规则:从第一个字母开始,如果对应的规则串字符是 `0`,则下一个字母应该生成当前字母的大/小写;如果是 `1` 则下一个字母应该生成当前字母的前/后一个字母。 注意:因为字母表中 `a` 没有前一个字母,`Z` 没有后一个字母,所以如果此时遇到 `1` 就忽略之。
输出
在一行中输出按规则生成的字母串。
样例输入
12 a
001011101101样例输出
aAaABCDdcbBC参考答案
#include<iostream>
using namespace std;
/*
大写字母,0:下一个就必须写同个字母的小写,1:字母表中下一个字母的大写;
小写字母,0:下一个就必须写同个字母的大写,1:字母表中前一个字母的小写。
*/
int main() {
int n;
char c;
string rule; //变换规则
cin>>n>>c;
cin>>rule;
cout<<c; //先原封不动输出第一个字符
for(int i=0;i<n;i++){ //生成n次
if(rule[i]=='0'){ //规则0
if('A'<=c && c<='Z'){ //大写,转换为同个字母的小写
c += 32;
} else { //小写,转换为同个字母的大写
c -= 32;
}
}
else{ //规则1
if('A'<=c&& c<='Z'){ //大写,转换为下一个字母的大写
if(c=='Z') continue; //没有,忽略
c += 1;
} else { //小写,转换为前一个字母的小写
if(c=='a') continue; //没有,忽略
c -= 1;
}
}
cout<<c;
}
return 0;
}
上一题
下一题