题目
代码
#include<iostream>
#include<string>
using namespace std;
int p1, p2, p3, offset = 0;
string ori, final, c, d;
int main(){
cin >> p1 >> p2 >> p3;
cin >> ori;
final = ori;
int size = ori.length();
for(int i=0;i<size;i++){
if(i!=0 && ori[i]=='-' && ori[i+1]!='-' && ori[i-1]!='-'){
int a = (int)ori[i-1];
int b = (int)ori[i+1];
c = final.substr(0,i+offset);
d = final.substr(i+1+offset, size);
if(a<b){
if(a<58 && b>96) continue;
else if(b-a==1){
final = c+d;
}
else{
string e = "";
if(p3==1){
for(int i=a+1;i<b;i++){
if(p1==1){
for(int j=0;j<p2;j++){
e += (char)i;
}
}
else if(p1==2){
for(int j=0;j<p2;j++){
if(i>57) e += (char)(i-32);
else e += (char)i;
}
}
else if(p1==3){
for(int j=0;j<p2;j++){
e += '*';
}
}
}
final = c + e + d;
}
else if(p3==2){
for(int i=b-1;i>a;i--){
if(p1==1){
for(int j=0;j<p2;j++){
e += (char)i;
}
}
else if(p1==2){
for(int j=0;j<p2;j++){
if(i>57) e += (char)(i-32);
else e += (char)i;
}
}
else if(p1==3){
for(int j=0;j<p2;j++){
e += '*';
}
}
}
final = c + e + d;
}
}
offset += (b-a-1)*p2-1;
}
else if(a>=b){
continue;
}
}
}
cout<<final;
return 0;
}
就是一道很烦的模拟
一定要注意以下两点
1、"-"可能出现在第一个或最后一个,同时可能连续出现,用判断特殊处理
2、如果x-y中x为数字而y为字母,应选择不展开!(与题目中提及的特殊情况不重叠)
坑爹的数据
现场写的话我绝对玩完