题目解读
简单模拟。
代码详注
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define double long double
using namespace std;
#define debug 0
const int maxn=1e6+50;
const ll mod=1e9+7;
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
inline ll read(){ll res=0,f=0;char ch=getchar();for(;!isdigit(ch);ch=getchar()) f=(ch=='-'?1:0);for(;isdigit(ch);ch=getchar()) res=(res<<3)+(res<<1)+(ch^'0');return f?-res:res;}
ll p1,p2,p3;
int check(char c1,char c2){//判断左右字符类型
if(c1>='a'&&c1<='z'&&c2>='a'&&c2<='z')
{
return 1;//小写
}
else if(c1>='A'&&c1<='Z'&&c2>='A'&&c2<='Z')
{
return 2;//大写
}
else if(c1>='0'&&c1<='9'&&c2>='0'&&c2<='9')
{
return 3;//数字
}
return 0;//不符合
}
void fun(char c1,char c2,int k){
if(k==0||c2<=c1)//不符合或非升序输出 -
{
cout<<"-";
return ;
}
if(c2==c1+1)//相邻升序输出
{
return ;
}
if(k==3)//数字
{
char ch='0';
if(p3==1)//升序
{
for(char i=c1+1;i<c2;i++)
{
for(int j=0;j<p2;j++)
{
if(p1==3)
{
cout<<"*";//p1==3则输出*
}
else
{
cout<<i;
}
}
}
}
else//降序
{
for(char i=c2-1;i>c1;i--)
{
for(int j=0;j<p2;j++)
{
if(p1==3)
{
cout<<"*";//p1==3则输出*
}
else
{
cout<<i;
}
}
}
}
return ;
}
char c;
if(k==1)//读入小写字母
{
c='a';
}
else//读入大写字母
{
c='A';
}
char ch;
if(p1==1)//输出小写字母
{
ch='a';
}
else if(p1==2)//输出大写字母
{
ch='A';
}
if(p3==1)//升序
{
for(char i=c1+1;i<c2;i++)
{
for(int j=0;j<p2;j++)
{
if(p1==3)
{
cout<<"*";//p1==3则输出*
}
else
{
cout<<char(i-c+ch);
}
}
}
}
else//降序
{
for(char i=c2-1;i>c1;i--)
{
for(int j=0;j<p2;j++)
{
if(p1==3)
{
cout<<"*";//p1==3则输出*
}
else
{
cout<<char(i-c+ch);
}
}
}
}
return ;
}
void solve(){
cin>>p1>>p2>>p3;
string s;
cin>>s;
int len=s.length();
for(int i=0;i<len;i++)
{
if(s[i]!='-')//正常输出
{
cout<<s[i];
continue;
}
if(i-1>=0&&i+1<len)//可走流程
{
fun(s[i-1],s[i+1],check(s[i-1],s[i+1]));
}
else//输出-
{
cout<<s[i];
}
}
return ;
}
int main(){
// freopen("plant2.in","r",stdin);
if(!debug)
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
}
solve();
return 0;
}