RC-u1 睿抗,启动!
你被委托开发一个用于睿抗机器人开发者大赛CAIP-编程技能赛的管理系统,这个管理系统需要一些账号名和密码,你需要按照规则根据账号生成对应的密码,具体规则是:
- 将当前操作的字符串初始化为提供的账号名。
- 每次生成会规定一个生成轮次 N。
- 对于每一轮次,按顺序执行以下操作:
- 对于当前操作的字符串,将所有大写字母替换为后一个字母;如将 A 替换为 B,B 替换为 C,以此类推。特别地,将 Z 替换为 A。对于所有小写字母,将其替换为前一个字母,如将 z 替换为 y,以此类推。特别地,将 a 替换为 z。
- 对于完成上一步后的字符串,如果连续出现了至少三个大写字母(不一定要相同),则将这些连续的大写字母全部改为小写字母;对于连续出现了至少三个小写字母(不一定要相同),则将这些连续的小写字母全部改为大写字母。注意修改不在原地进行,即修改结果不影响本次步骤中对于连续的判定。
现在给定账号名以及轮次,请你生成对应的密码。
输入格式:
输入第一行是一个正整数 N (1≤N≤10),表示生成的轮次数;
输入第二行是一个字符串 S (1≤∣S∣≤100),表示需要操作的账号名。账号名只包含大小写及数字。
注意:如果 S 为 yourname,请将 S 改为你的名字的拼音拼写,全小写,不包含空格。如你的名字为张三,则你操作的字符串应为 zhangsan。请务必写真实姓名,写错误的名字可能会导致成绩被取消。
输出格式:
输出两行,第一行为账号名,第二行为根据规则生成的密码。
输入样例:
1
DOGcat1234XZxzABabFFXIV
输出样例:
DOGcat1234XZxzABabFFXIV
ephBZS1234YAwyBCzaggyjw
输入样例:
2
DOGcat1234XZxzABabFFXIV
输出样例:
DOGcat1234XZxzABabFFXIV
DOGcat1234ZBvxCDYZFFXIV
提示:
本题返回结果若为格式错误均可视为答案错误。
分析:
暴力模拟即可,需要注意的是必须一步一步来,每次都要更新新的一轮的大写和小写的字母,当然也可以用更为巧妙的方法,硬做肯定错不了就是啦。
AC代码:
#include<bits/stdc++.h>
using namespace std;
// 连续出现了三个小写字母 全部改为大写字母
// 核心在于找到 连续的小写字母
const int N = 110;
int b[N] , b1[N] , sum[N] ,sum1[N], daxie[N] , xiaoxie[N];
string s;
char c[N];
void solve(){
int n ;
cin >> n ;
cin >> s;
if(s == "yourname") {
s = "zhangsan" ;
cout << s <<endl;
}else cout << s <<endl;
int n1 = s.size();
for(int i = 0; i < n1 ; i ++) c[i + 1] = s[i];
for(int o = 0 ; o < n ; o ++){
memset(b , 0 ,sizeof b);
memset(b1 , 0 ,sizeof b1);
memset(sum , 0 ,sizeof sum);
memset(sum1 , 0 , sizeof sum1);
memset(daxie , 0 ,sizeof daxie);
memset(xiaoxie , 0 ,sizeof xiaoxie);
for(int i = 1 ; i<= n1 ; i++){
if(islower(c[i])) b[i] = 1;
else if(isupper(c[i])) b1[i] = 1;
}
for(int i = 1 ; i <= n1; i ++){
if(b[i]) sum[i] = sum[i- 1] + b[i];
else sum[i + 1] = 0 ;
}
for(int i = 1 ; i <= n1; i ++){
if(b1[i]) sum1[i] = sum1[i- 1] + b1[i];
else sum1[i + 1] = 0 ;
}
for(int i = s.size() ; i >= 1 ; i --){
if(sum[i] >= 3){
for(int j = i ; j >= i - sum[i] + 1 ; j--){
daxie[j] = 1;
}
i = i - sum[i] + 1;
}
}
for(int i = s.size() ; i >= 1 ; i --){
if(sum1[i] >= 3){
for(int j = i ; j >= i - sum1[i] + 1 ; j--){
xiaoxie[j] = 1;
}
i = i - sum1[i] + 1;
}
}
for(int i = 1 ; i <= n1; i++){
if(islower(c[i])){
int d = c[i] - 'a';
int d1 = d - 1;
char c1 = 'a' + ( d1 + 26 * 4 ) % 26;
c[i] = c1;
}else if(isupper(c[i])){
int d = c[i] - 'A';
int d1 = d + 1;
char c1 = 'A' + d1 % 26;
c[i] = c1;
}
}
for(int i = 1; i <= n1 ; i++) if(daxie[i]) {
c[i] = c[i] - 32;
}
for(int i = 1; i <= n1 ; i++) if(xiaoxie[i]) {
c[i] += 32;
}
}
for(int i = 1 ; i<= n1 ; i++) cout <<c[i];
}
int main(){
solve();
return 0;
}

最低0.47元/天 解锁文章
1109

被折叠的 条评论
为什么被折叠?



