2023 RoboCom 世界机器人开发者大赛-本科组(国赛) CAIP 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
 

#include <bits/stdc++.h>
using namespace std;
string zhanghao;
string mima;
void part1(){
    int len=mima.length();
    for(int i=0;i<len;i++){
        if(mima[i]>='A'&&mima[i]<'Z'){
            mima[i]+=1;
        }else if(mima[i]=='Z'){
            mima[i]='A';
        }else if(mima[i]>'a'&&mima[i]<='z'){
            mima[i]-=1;
        }else if(mima[i]=='a'){
            mima[i]='z';
        }
            
    }
}
void part2(){
    int daxie=0;
    int xiaoxie=0;
    int len=mima.length();
    int lot=0; //1:大写, 2:小写, 3:数字
    for(int i=0;i<len;i++){
        if(mima[i]>='A'&&mima[i]<='Z'){
            if(lot!=1){
                if(lot==2&&xiaoxie>=3){
                    for(int j=i-1;j>=i-xiaoxie;j--){
                        mima[j]-=32;
                    }
                }
                daxie=0;
                xiaoxie=0;
            }
            daxie++;
            lot=1;
        }else if(mima[i]>='a'&&mima[i]<='z'){
            if(lot!=2){
                if(lot==1&&daxie>=3){
                    for(int j=i-1;j>=i-daxie;j--){
                        mima[j]+=32;
                    }
                }
                daxie=0;
                xiaoxie=0;
            }
            xiaoxie++;
            lot=2;
        }else{
            if(lot==1&&daxie>=3){
            for(int j=i-1;j>=i-daxie;j--){
                 mima[j]+=32;
            }
            }else if(lot==2&&xiaoxie>=3){
            for(int j=i-1;j>=i-xiaoxie;j--){
            mima[j]-=32;
            }
            }
            daxie=0;
            xiaoxie=0;
            lot=3;
        }
    }
    if(lot==1&&daxie>=3){
        for(int j=len-1;j>=len-daxie;j--){
            mima[j]+=32;
        }
    }else if(lot==2&&xiaoxie>=3){
        for(int j=len-1;j>=len-xiaoxie;j--){
            mima[j]-=32;
        }
    }
}
int main(){
    int N;
    cin>>N;
    cin>>zhanghao;
    if(zhanghao=="yourname")
        zhanghao="zhangchunxia";
    mima=zhanghao;
    while(N--){
        part1();
        part2();
    }
    cout<<zhanghao<<endl<<mima<<endl;
    return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值