算法:模拟
难度:NOIP-
题解:你只需要看明白题意就好啦!!!
p2=k表示同一个字符要连续填充k个
EG:
input:3 1 1
-z-l-k-d-h
output:-z-l-k-d***h
//题意理解错了,debug了30min,啊啊啊
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cmath>
#include <algorithm>
#define ll long long
#define N 105
using namespace std;
string str;
char biaox[30]={0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char biaod[30]={0,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int vis[N];
int main()
{
int p1,p2,p3;
scanf("%d%d%d",&p1,&p2,&p3);
cin >> str;
int len=str.size();
for(int i = 0;i < len;i++)
{
//if(i==0&&str[i]=='-') printf("-");
if(vis[i]) continue;
if(str[i+1]=='-')
{
vis[i+1]=1;
if(str[i+2]-str[i]==1)
{
cout << str[i] ;
i+=1;
continue;
}
if(str[i]-str[i+2]>=0)
{
cout << str[i] << str[i+1] ;
i+=1;
continue;
}
if(str[i]-48>=0&&str[i]-48<=9&&str[i+2]-str[i]>0&&str[i+2]-48>=0&&str[i+2]-48<=9)//同为数字
{
cout << str[i];
if(p1==3)//星号“*”
{
for(int o = str[i]-48+1;o < str[i+2]-48;o++)
{
for(int k = 1;k <= p2;k++)
{
printf("*");
}
}
}else
{
for(int o = str[i]-48+1;o < str[i+2]-48;o++)
{
for(int jj = 1;jj <= p2;jj++)
{
printf("%d",o);
}
}
}
continue;
}else if(str[i]-96>=1&&str[i]-96<=26&&str[i+2]-str[i]>0&&str[i+2]-96>=1&&str[i+2]-96<=26)//同为字母
{
cout << str[i];
if(p1==1)//小写字母
{
if(p3==1)//正序
{
for(int k = str[i]-96+1;k < str[i+2]-96;k++)
{
for(int jj = 1;jj <= p2;jj++)
{
printf("%c",biaox[k]);
}
}
}else if(p3==2)//倒序
{
for(int k = str[i+2]-96-1;k > str[i]-96;k--)
{
for(int jj = 1;jj <= p2;jj++)
{
printf("%c",biaox[k]);
}
}
}
}else if(p1==2)//大写字母
{
if(p3==1)//正序
{
for(int k = str[i]-96+1;k < str[i+2]-96;k++)
{
for(int jj = 1;jj <= p2;jj++)
{
printf("%c",biaod[k]);
}
}
}else if(p3==2)//倒序
{
for(int k = str[i+2]-96-1;k > str[i]-96;k--)
{
for(int jj = 1;jj <= p2;jj++)
{
printf("%c",biaod[k]);
}
}
}
}else if(p1==3)//星号“*”
{
for(int k = str[i]-96+1;k < str[i+2]-96;k++)
{
for(int k = 1;k <= p2;k++)
{
printf("*");
}
}
}else cout << str[i+2];
continue;
}else
{
cout << str[i] << str[i+1];
continue;
}
}
cout << str[i];
}
return 0 ;
}